0

SQLクライアントをMySQLQueryBrowserからMySQLWorkbenchに更新しました。そのアップグレードにより、XML形式が変更され、XSLTが機能しなくなりました。最初のアイテムのみが表示されます。

これは、XMLとXSLTの簡略化されたバージョンであり、MySQLデータベースに送信されるNessus出力です。

XML

<?xml version="1.0" encoding="UTF-8"?>
<DATA>

    <ROW>
        <Niveau>Haute</Niveau>
        <Nom>Some vulnerability</Nom>
        <Solution>Some Solution</Solution>
        <cve>CVE-2006-1234, CVE-2006-5615</cve>
        <bid>11263, 11291</bid>
        <Number>5</Number>
    </ROW>

    <ROW>
        <Niveau>Haute</Niveau>
        <Nom>Some Other Vulnerability</Nom>
        <Solution>Apply the security patch.</Solution>
        <cve>CVE-2006-1742, CVE-2006-1743</cve>
        <bid>20584, 20585</bid>
        <Number>23</Number>
    </ROW>

    <ROW>
        <Niveau>Moyenne</Niveau>
        <Nom>Yet another vulnerability</Nom>
        <Solution>Do this and that</Solution>
        <cve></cve>
        <bid></bid>                
        <Number>2</Number>
    </ROW>


</DATA>

XSLT

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

  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">

    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Word.Document"</xsl:text>
    </xsl:processing-instruction>
    <w:wordDocument
      xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">

      <w:body>
        <xsl:for-each select="DATA/ROW">
          <w:p>
            <w:r>
              <w:t><xsl:value-of select="Nom"/></w:t>
            </w:r>
          </w:p>
        </xsl:for-each>
      </w:body>
    </w:wordDocument>

  </xsl:template>
</xsl:stylesheet>

次に、Word文書で2つをマージするスクリプトでそれを解析します。エントリと同じ数のテーブルを作成するために使用します。しかし、今は最初の行しか取得できません。<xsl:template match="/">どちらかと関係があると確信してい<xsl:for-each select="DATA/ROW">ますが、正しい組み合わせが見つからないようです。

連番を前に付ける方法も教えていただければ、Nomとても1- Nom嬉しいキャンピングカーになります。

現在の出力

<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
  <w:body>
    <w:p>
      <w:r>
        <w:t>Some vulnerability</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:wordDocument>

必要な出力

<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
  <w:body>
    <w:p>
      <w:r>
        <w:t>1- Some vulnerability</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:r>
        <w:t>2- Some Other Vulnerability</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:r>
        <w:t>3- Yet another vulnerability</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:wordDocument>

ありがとうございました。

4

2 に答える 2

0

これはあなたが望むことをするはずです:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/DATA">

    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Word.Document"</xsl:text>
    </xsl:processing-instruction>
    <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
      <w:body>
        <xsl:for-each select="ROW">
          <w:p>
            <w:r>
              <w:t>
                <xsl:value-of select="concat(count(preceding-sibling::ROW)+1,'- ',Nom)"/>
              </w:t>
            </w:r>
          </w:p>
        </xsl:for-each>
      </w:body>
    </w:wordDocument>
  </xsl:template>
</xsl:stylesheet>

「より多くのXSLT」ソリューションは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/DATA">

    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Word.Document"</xsl:text>
    </xsl:processing-instruction>
    <w:wordDocument>
      <w:body>
        <xsl:apply-templates select="ROW"/>
      </w:body>
    </w:wordDocument>
  </xsl:template>

  <xsl:template match="ROW">
    <w:p>
      <w:r>
        <w:t>
          <xsl:value-of select="concat(count(preceding-sibling::ROW)+1,'- ',Nom)"/>
        </w:t>
      </w:r>
    </w:p>
  </xsl:template>
</xsl:stylesheet>

両方の出力は次のとおりです。

<?xml version="1.0" encoding="utf-8"?><?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
  <w:body>
    <w:p>
      <w:r>
        <w:t>1- Some vulnerability</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:r>
        <w:t>2- Some Other Vulnerability</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:r>
        <w:t>3- Yet another vulnerability</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:wordDocument>
于 2012-11-29T19:40:54.010 に答える
0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/DATA">

    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Word.Document"</xsl:text>
    </xsl:processing-instruction>
    <w:wordDocument
      xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">

      <w:body>
        <xsl:for-each select="//ROW">
          <xsl:variable name="pos" select="position()"/>
          <w:p>
            <w:r>
              <w:t>
              <xsl:value-of select="concat($pos,'-')"/>
              <xsl:value-of select="Nom"/>
              </w:t>
            </w:r>
          </w:p>
        </xsl:for-each>
      </w:body>
    </w:wordDocument>

  </xsl:template>
</xsl:stylesheet>
于 2012-11-30T12:47:44.080 に答える