未在 XSLT 中引用默认命名空间 [重复]
Posted
技术标签:
【中文标题】未在 XSLT 中引用默认命名空间 [重复]【英文标题】:Not Referencing Default Namespace in XSLT [duplicate] 【发布时间】:2018-10-07 10:36:41 【问题描述】:我在尝试引用的 xml 文件中的默认命名空间有问题。有谁知道这个默认的 ns 给我带来了如此多的悲伤。我已经束手无策了!
输入XML
<?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 返回任何东西,但是一旦我删除了默认命名空间,一切都很好。我在这里错过了什么????
谢谢
【问题讨论】:
搜索“XSLT 默认命名空间”可找到此问题的 641 个先前答案。 【参考方案1】:试试这个:
<?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>
您缺少命名空间
【讨论】:
@Derek,如果它比accept这个答案更适合你【参考方案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"/>
,否则它将在 no namespace 中选择 someStatus
。
【讨论】:
以上是关于未在 XSLT 中引用默认命名空间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章