我正在尝试遍历XML文档中的后代节点,但我似乎无法获得正确的语法。 XML文件附带一个命名空间,因此在我的XSL文档中,我将该命名空间别名化。我的XML文档的简单版本如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="my.xsl"?>
<game id="4496878f-921c-41ab-9fcd-54906a9ed89c" status="closed">
<summary>
<quarter id="1" points="10"/>
<quarter id="2" points="3"/>
<quarter id="3" points="0"/>
<quarter id="4" points="6"/>
</summary>
</game>
我的XSL文档如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:f="my.xsl">
<xsl:output method="text" indent="no" />
<xsl:template match="/">
<xsl:text>QUARTER,POINTS</xsl:text>
<xsl:apply-templates select="/f:game/f:summary" />
</xsl:template>
<xsl:template match="f:summary">
<xsl:text> </xsl:text>
<xsl:for-each select"/f:quarter">
<xsl:text>"</xsl:text><xsl:value-of select="@id"/><xsl:text>"</xsl:text>
<xsl:text>,"</xsl:text><xsl:value-of select="@points"/><xsl:text>"</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
Xml add Namespace
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Untitled4.xsl"?>
<game id="4496878f-921c-41ab-9fcd-54906a9ed89c" status="closed" xmlns="http://www.test.com/">
<summary>
<quarter id="1" points="10"/>
<quarter id="2" points="3"/>
<quarter id="3" points="0"/>
<quarter id="4" points="6"/>
</summary>
</game>
和xsl文件添加namesapce
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http://www.test.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xslFormatting="urn:xslFormatting">
<xsl:output method="text" indent="no" />
<xsl:template match="/">
<xsl:text>QUARTER,POINTS</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="t:summary">
<xsl:text> </xsl:text>
<xsl:for-each select="t:quarter">
<xsl:text>\"</xsl:text><xsl:value-of select="@id"/><xsl:text>\"</xsl:text>
<xsl:text>,\"</xsl:text><xsl:value-of select="@points"/><xsl:text>\"</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
XML文件带有命名空间
我在提供的XML示例中没有看到命名空间。正如其他人所指出的,如果您有命名空间,则必须将前缀绑定到输入中使用的相同命名空间URI。
此外,<xsl:for-each select"/f:quarter">
正在尝试选择一个名为quarter
的根元素,它不存在。更不用说缺少=
。
你可能意味着<xsl:for-each select=".//f:quarter">
,但是你不需要它来选择当前的孩子(而不是后代)节点 - 只需<xsl:for-each select="f:quarter">
。