我已将我的SQL客户端从MySQL Query Browser更新到MySQL Workbench。 通过该升级,我的XML格式发生了变化,我的XSLT不再起作用了。它只会显示第一个项目。
这是XML和XSLT的简化版本,它的Nessus输出发送到MySQL数据库。
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文档中。它用于创建与我有条目一样多的表。但现在我只得到第一线。
我很确定它与<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>
谢谢。
答案 0 :(得分: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>
答案 1 :(得分: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>