我有一个像这样序列化的C#类:
<oadResults
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.tyr.org.uk/standards"
>
<Link>http://www.tyr.org.uk//290/Data.zip</Link>
<ID>3540</ID>
</oadResults>
我有一个XSLT文件:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
ID <xsl:value-of select="ID"/> </xsl:template>
</xsl:stylesheet>
转换不起作用,结果是:"ID"
但是如果我从XML文件中删除 this :
xmlns="http://www.tyr.org.uk/standards"
工作正常,我得到了"ID:3540"
您能告诉我如何解决更改XSL文件而不是XML的问题吗?
答案 0 :(得分:2)
我建议:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tyr="http://www.tyr.org.uk/standards"
exclude-result-prefixes="tyr"
>
<xsl:template match="/tyr:oadResults">
<xsl:text>ID </xsl:text>
<xsl:value-of select="tyr:ID"/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
请注意<xsl:text>
元素。它们有助于保持XSL代码的清洁(在正确的缩进方面),同时确保可预测的输出格式。
exclude-result-prefixes
阻止tyr
名称空间声明出现在输出中。
答案 1 :(得分:1)
您必须将命名空间添加到XSLT。
<?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.tyr.org.uk/standards">
<xsl:template match="/">
ID <xsl:value-of select="t:ID"/>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:0)
尝试将xmlns="http://www.tyr.org.uk/standards"
添加到XSLT文档的xsl:stylesheet
节点。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns="http://www.tyr.org.uk/standards" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
ID <xsl:value-of select="ID"/> </xsl:template>
</xsl:stylesheet>
或者,您可以在XSLT文档中为http://www.tyr.org.uk/standards
命名空间指定别名,因此它看起来像这样:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:bob="http://www.tyr.org.uk/standards" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
ID <xsl:value-of select="bob:ID"/> </xsl:template>
</xsl:stylesheet>
找到有关xml命名空间的更多信息