2016-09-25 15 views
1

カスタムXML文書をGraphMLに変換するためのXSL文書をコンパイルしました(yEdグラフエディタの追加メタデータを使用)。変換は期待通りに機能して完了しますが、問題が1つあります。変換を実行するためにどのツールを使用したとしても、結果のドキュメントはの単一行で構成されているので、変換を実行するたびにフォーマットする必要があります。私の質問は:XSLTを使ってXML文書を1行に変換する

かなり印刷されたXML文書を持つように私のXSL文書を調整するにはどうすればいいですか?

OR

私が間違って何をしているのですか?

<?xml version="1.0"?> 
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.0/ygraphml.xsd"> 
    <key id="workerDescription" for="node" yfiles.type="nodegraphics"/> 
    <key for="edge" id="response" yfiles.type="edgegraphics"/> 
    <graph edgedefault="directed" id="PathID"> 
     <node id="PathID"> 
      <data key="workerDescription"> 
       <y:ShapeNode> 
        <y:Fill color="#FFCC00" transparent="false"/> 
        <y:NodeLabel>PathID</y:NodeLabel> 
       </y:ShapeNode> 
      </data> 
     </node> 
     <edge source="PathID" target="PathID.EntryWorker"/> 
     <node id="PathID.EntryWorker"> 
      <data key="workerDescription"> 
       <y:ShapeNode alignment="center" autoSizePolicy="content" modelName="internal" modelPosition="c"> 
        <y:NodeLabel>EntryWorker &gt; EntryWorkerClass</y:NodeLabel> 
       </y:ShapeNode> 
      </data> 
     </node> 
     <edge source="PathID.EntryWorker" target="PathID.MarkScoring" directed="true"> 
      <data key="response"> 
       <y:PolyLineEdge> 
        <y:EdgeLabel>SUCCESS</y:EdgeLabel> 
        <y:Arrows source="none" target="standard"/> 
       </y:PolyLineEdge> 
      </data> 
     </edge> 
     <edge source="PathID.EntryWorker" target="PathID.ERRORM" directed="true"> 
      <data key="response"> 
       <y:PolyLineEdge> 
        <y:EdgeLabel>ERROR</y:EdgeLabel> 
        <y:Arrows source="none" target="standard"/> 
       </y:PolyLineEdge> 
      </data> 
     </edge> 
     <node id="PathID.ERRORM"> 
      <data key="workerDescription" transparent="false"> 
       <y:ShapeNode alignment="center" autoSizePolicy="content" modelName="internal" modelPosition="c"> 
        <y:Fill color="#FF0000"/> 
        <y:NodeLabel>ERRORM</y:NodeLabel> 
       </y:ShapeNode> 
      </data> 
     </node> 
     <node id="PathID.MarkScoring"> 
      <data key="workerDescription"> 
       <y:ShapeNode alignment="center" autoSizePolicy="content" modelName="internal" modelPosition="c"> 
        <y:NodeLabel>MarkScoring &gt; MarkScoringClass</y:NodeLabel> 
       </y:ShapeNode> 
      </data> 
     </node> 
     <edge source="PathID.MarkScoring" target="PathID.SUCCESS" directed="true"> 
      <data key="response"> 
       <y:PolyLineEdge> 
        <y:EdgeLabel>SUCCESS</y:EdgeLabel> 
        <y:Arrows source="none" target="standard"/> 
       </y:PolyLineEdge> 
      </data> 
     </edge> 
     <node id="PathID.SUCCESS"> 
      <data key="workerDescription" transparent="false"> 
       <y:ShapeNode alignment="center" autoSizePolicy="content" modelName="internal" modelPosition="c"> 
        <y:Fill color="#FF0000"/> 
        <y:NodeLabel>SUCCESS</y:NodeLabel> 
       </y:ShapeNode> 
      </data> 
     </node> 
     <edge source="PathID.MarkScoring" target="PathID.ERRORSCOR" directed="true"> 
      <data key="response"> 
       <y:PolyLineEdge> 
        <y:EdgeLabel>ERROR</y:EdgeLabel> 
        <y:Arrows source="none" target="standard"/> 
       </y:PolyLineEdge> 
      </data> 
     </edge> 
     <node id="PathID.ERRORSCOR"> 
      <data key="workerDescription" transparent="false"> 
       <y:ShapeNode alignment="center" autoSizePolicy="content" modelName="internal" modelPosition="c"> 
        <y:Fill color="#FF0000"/> 
        <y:NodeLabel>ERRORSCOR</y:NodeLabel> 
       </y:ShapeNode> 
      </data> 
     </node> 
    </graph> 
</graphml> 

私は:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE paths SYSTEM "paths.dtd"> 
<paths> 
    <path id="PathID"> 
     <entry-point name="start" worker-ref="EntryWorker" /> 
     <worker id="EntryWorker" idref="EntryWorkerClass"> 
      <response name="SUCCESS" worker-ref="MarkScoring" /> 
      <response name="ERROR" exit="ERRORM" /> 
     </worker> 
     <worker id="MarkScoring" idref="MarkScoringClass"> 
      <response name="SUCCESS" exit="SUCCESS" /> 
      <response name="ERROR" exit="ERRORSCOR" /> 
     </worker> 
    </path> 
</paths> 

そして、私の出力は以下の通りです:

<xsl:stylesheet version="1.0" encoding="UTF-8" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/paths"> 
     <graphml xmlns="http://graphml.graphdrawing.org/xmlns" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:y="http://www.yworks.com/xml/graphml" 
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.0/ygraphml.xsd"> 
      <key id="workerDescription" for="node" yfiles.type="nodegraphics"/> 
      <key for="edge" id="response" yfiles.type="edgegraphics"/> 
      <xsl:for-each select="path"> 
       <graph edgedefault="directed"> 
        <xsl:attribute name="id"> 
         <xsl:value-of select="@id"/> 
        </xsl:attribute> 

        <node> 
         <xsl:attribute name="id"> 
          <xsl:value-of select="@id"/> 
         </xsl:attribute> 
         <data key="workerDescription"> 
          <y:ShapeNode> 
           <y:Fill color="#FFCC00" transparent="false"/> 
           <y:NodeLabel> 
            <xsl:value-of select="@id"/> 
           </y:NodeLabel> 
          </y:ShapeNode> 
         </data> 
        </node> 

        <xsl:for-each select="entry-point"> 
         <edge> 
          <xsl:attribute name="source"> 
           <xsl:value-of select="../@id"></xsl:value-of> 
          </xsl:attribute> 
          <xsl:attribute name="target"> 
           <xsl:value-of select="../@id"/>.<xsl:value-of select="@worker-ref"/> 
          </xsl:attribute> 
         </edge> 
        </xsl:for-each> 

        <xsl:for-each select="worker"> 
         <node> 
          <xsl:attribute name="id"> 
           <xsl:value-of select="../@id"/>.<xsl:value-of select="@id"/> 
          </xsl:attribute> 
          <data key="workerDescription"> 
           <y:ShapeNode> 
            <xsl:attribute name="alignment">center</xsl:attribute> 
            <xsl:attribute name="autoSizePolicy">content</xsl:attribute> 
            <xsl:attribute name="modelName">internal</xsl:attribute> 
            <xsl:attribute name="modelPosition">c</xsl:attribute> 
            <y:NodeLabel> 
             <xsl:choose> 
              <xsl:when test="@idref = 'CallPath'"> 
               <xsl:value-of select="@id"/> &gt; <xsl:value-of select="context/value/map/entry/@value"/> 
              </xsl:when> 
              <xsl:otherwise> 
               <xsl:value-of select="@id"/> &gt; <xsl:value-of select="@idref"/> 
              </xsl:otherwise> 
             </xsl:choose> 
            </y:NodeLabel> 
            <xsl:if test="@idref = 'CallPath'"> 
             <y:Fill color="#FFCC00" transparent="false"/> 
            </xsl:if> 
           </y:ShapeNode> 
          </data> 
         </node> 

         <xsl:for-each select="response"> 
          <edge> 
           <xsl:attribute name="source"> 
            <xsl:value-of select="../../@id"/>.<xsl:value-of select="../@id"/> 
           </xsl:attribute> 
           <xsl:attribute name="target"> 
            <xsl:value-of select="../../@id"/>.<xsl:value-of select="@worker-ref | @exit"/> 
           </xsl:attribute> 
           <xsl:attribute name="directed">true</xsl:attribute> 
           <data key="response"> 
            <y:PolyLineEdge> 
             <y:EdgeLabel> 
              <xsl:value-of select="@name"/> 
             </y:EdgeLabel> 
             <y:Arrows source="none" target="standard"/> 
            </y:PolyLineEdge> 
           </data> 
          </edge> 

          <xsl:for-each select="@exit"> 
           <node> 
            <xsl:attribute name="id"> 
             <xsl:value-of select="../../../@id"/>.<xsl:value-of select="."/> 
            </xsl:attribute> 
            <data key="workerDescription" transparent="false"> 
             <y:ShapeNode> 
              <xsl:attribute name="alignment">center</xsl:attribute> 
              <xsl:attribute name="autoSizePolicy">content</xsl:attribute> 
              <xsl:attribute name="modelName">internal</xsl:attribute> 
              <xsl:attribute name="modelPosition">c</xsl:attribute> 
              <y:Fill color="#FF0000"/> 
              <y:NodeLabel> 
               <xsl:value-of select="."/> 
              </y:NodeLabel> 
             </y:ShapeNode> 
            </data> 
           </node> 
          </xsl:for-each> 
         </xsl:for-each> 
        </xsl:for-each> 
       </graph> 
      </xsl:for-each> 
     </graphml> 
    </xsl:template> 
</xsl:stylesheet> 

私の入力は以下の通りです:

私のXSLコードは以下のとおりです。私の文書を変換してフォーマットするためのNotepad ++ "XML Tools"プラグインを使用しています。 の形式のでXSLT変換を組み込むための提案は、私のワークフロー(プログラム的にまたはそれ以外)にも歓迎されます。

+0

**完全**例を投稿してください入力と予想される出力を含む - [mcve]を参照してください。 –

答えて

0

変更し、この部分:

<xsl:stylesheet version="1.0" encoding="UTF-8" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

へ:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 
0

<xsl:method output="xml" indent="yes"/>をxsl:stylesheetとxsl:templateの間で試してみてください。一部のプロセッサでは動作する可能性があります。

(ただし、非インデントXMLとあなたの問題は何ですか?)

+0

私はあなたの提案を試みたが、うまくいかなかった。変換は失敗します。 :-( GraphMLに一連のXML文書をコンパイルする必要があります。結果として得られるGraphMLが常に有効なグラフではないため、手動で調整する必要があります。 –

+0

@PuzzledSolver "*動作しませんでした* –

+0

@ michael.hor257k私はあなたが何か問題を起こしているかどうかを知りたいのですが、私のドキュメントを変換するためのNotepad ++ "XML Tools"プラグインを使用しています。 "現在のソースで変換を適用できません。ソース解析中にエラーが発生しました。 –

関連する問題