我想通过XSLT转换将XML文档解析到网站。C#XSLT转换中的XPath问题
然而,使它工作我必须使用以下XPath:
/*[name()='standards']/*[name() = 'standard']
为什么下面的XPath表达式不工作?
/standards/standard
我想通过XSLT转换将XML文档解析到网站。C#XSLT转换中的XPath问题
然而,使它工作我必须使用以下XPath:
/*[name()='standards']/*[name() = 'standard']
为什么下面的XPath表达式不工作?
/standards/standard
您的问题是在XPath的最常见问题 - 搜索XPath和缺省命名空间,你会发现很多好的答案。
总结问题:XPath将任何无前缀的名称解释为属于“no namespace”。
因此,任何属于某个默认命名空间(不是“no命名空间”)的XPath表达式中的前缀名不会被选中。
继续在位置步骤中使用名称的一种方法是向XPath处理器指示特定前缀(例如“x”)与默认名称空间关联。然后问题:
/x:standards/x:standard
在.NET这样的命名空间绑定(称为“命名空间的登记”)是使用XmlNamespaceManager
类完成。看到这个complete example。
在XSLT中,只需在全局级别定义一个名称空间,然后指定XPath表达式,其中每个元素名称都由前缀定义前缀。
这里是一个小例子:
<nums xmlns="some:nums">
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
为了处理上述XML文档中,我们有这个:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="some:nums">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:value-of select="/x:nums/x:num[. = 3]"/>
</xsl:template>
</xsl:stylesheet>
应用该变换以上述的XML文档正确地选择想要的元素并输出其字符串值:
03
我不知道你的问题是什么。只需服用野生刺,或许这就是你想要的...
<xsl:stylesheet version="1.0"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ikas="http://www.ikas.dk"
exclude-result-prefixes="msxsl ikas">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<div xmlns="http://www.ikas.dk">
<textarea>
<xsl:copy-of select="/ikas:standards/ikas:standard"/>
</textarea>
</div>
</xsl:template>
</xsl:stylesheet>
我认为这是因为您的转换引擎不是您正在使用的默认名称空间的轴,尝试添加映射。 – 2012-07-30 11:33:18
什么是问题? – Utkanos 2012-07-30 11:33:47