我有一个XML文档,其根目录显示默认命名空间.像这样的东西:
<MyRoot xmlns="http://www.mysite.com">
<MyChild1>
<MyData>1234</MyData>
</MyChild1>
</MyRoot>
Run Code Online (Sandbox Code Playgroud)
由于默认命名空间,解析XML的XSLT无法按预期工作,即当我删除命名空间时,一切都按预期工作.
这是我的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/" >
<soap:Envelope xsl:version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<NewRoot xmlns="http://wherever.com">
<NewChild>
<ChildID>ABCD</ChildID>
<ChildData>
<xsl:value-of select="/MyRoot/MyChild1/MyData"/>
</ChildData>
</NewChild>
</NewRoot>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
XSLT文档需要做什么才能使翻译正常工作?在XSLT文档中究竟需要做什么?
Pav*_*aev 66
您需要在XSLT中声明命名空间,并在XPath表达式中使用它.例如:
<xsl:stylesheet ... xmlns:my="http://www.mysite.com">
<xsl:template match="/my:MyRoot"> ... </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
请注意,如果要在XPath中引用该命名空间中的元素,则必须提供一些前缀.虽然你可以xmlns="..."不使用前缀,它可以用于文字结果元素,但它不适用于XPath - 在XPath中,无前缀的名称始终被认为是在空白URI的命名空间中,无论其xmlns="..."范围如何.