我一直在使用XSLT从XML抽取信息时遇到问题。命名空间也出现在输出中,这是不可接受的。使用XSLT从XML抽取信息时无法摆脱名称空间
我从另一个系统收到的XML
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:DeptResponse xmlns:ns1="http://samplecomp.com" xmlns="http://mycomp.org">
<Department>
<Building bid="b_1579">
<DeptName>Sports</DeptName>
<DeptHead>
<Person pid="123">
<Name>David Shephard</Name>
<Address>
<Street>Test</Street>
<State code="18">Georgia</State>
</Address>
</Person>
</DeptHead>
<DeptYear>1925</DeptYear>
</Department>
</ns1:DeptResponse>
</soap:Body>
</soap:Envelope>
我的XSL到etract从上面的XML所需的信息:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://samplecomp.com"
xmlns:dept="http://mycomp.org"
exclude-result-prefixes="ns1 xsl dept">
<xsl:template match="/">
<xsl:apply-templates select="//dept:Person"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy copy-namespaces="no" >
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我XSL后收到的响应: contaitn一个的xmlns的响应: =“http://myccomp.org”,我想摆脱。我曾尝试使用copy-namespaces =“no”但没用。 :(
<Person xmlns="http://mycomp.org" pid="123">
<Name>David Shephard</Name>
<Address>
<Street>Test</Street>
<State code="18">Georgia</State>
</Address>
</Person>
请帮帮我。
在此先感谢。
非常感谢。有效。但我不明白为什么添加了文本()。 – user1760178
我添加了'text()'以明确显示模板正在处理通常由'node()'匹配的所有其他项目,现在有一个单独的'*'模板。你可以放弃它,它仍然可以工作,因为内置/默认模板会复制'text()'。 –