我正在尝试引用xml文件中的默认命名空间。有谁知道乳清这个默认的ns让我如此悲伤。我的智慧结束了!
InputXML
<?xml version="1.0" encoding="utf-8"?>
<contactBatchResponse version="1.0.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/somelocation.xsd"
xmlns="http://www.somecompany.com">
<FileStatus>
<someStatus>get status</someStatus>
</FileStatus>
</contactBatchResponse>
我的错误xslt :(
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/somelocation.xsd"
xmlns="http://www.somecompany.com"
exclude-result-prefixes="#default xsi xsl ">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<Foo>
<xsl:value-of select="//someStatus"/>
</Foo>
</xsl:template>
</xsl:stylesheet>
当我运行这个时,我没有为Foo返回任何内容,但是一旦删除默认命名空间,一切正常。我在这里错过了什么????
谢谢
答案 0 :(得分:2)
您错过了使用xpath-default-namespace
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/somelocation.xsd"
xmlns="http://www.somecompany.com"
xpath-default-namespace="http://www.somecompany.com"
exclude-result-prefixes="#default xsi xsl ">
请注意,您对xmlns="http://www.somecompany.com"
的使用仅适用于<Foo>
标记,因此它们位于此默认命名空间中。它不包括你的xpath表达式<xsl:value-of select="//someStatus"/>
,否则会在没有名称空间的情况下选择someStatus
。
答案 1 :(得分:2)
试试这个:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/somelocation.xsd"
xmlns:a="http://www.somecompany.com"
exclude-result-prefixes="xsi xsl a">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<Foo>
<xsl:value-of select="//a:someStatus"/>
</Foo>
</xsl:template>
</xsl:stylesheet>
您缺少名称空间