以下XPath表达式的非常奇怪的行为:
//*[local-name() = 'Name']/text(), '-' , //*[local-name() = 'Value']/text()
我想从以下SOAP响应中检索它: ...
<Case>
<cam:SpecificCase xmlns:cam="http://my.namespace/CaseManagement">
<cam:CaseType>Complaint_SenMngt</cam:CaseType>
<cam:SpecificCaseAttribute>
<cam:TypeName>Complaint Inquiry Claim Case</cam:TypeName>
<cam:Name>Content Corrections</cam:Name>
<cam:Value>false</cam:Value>
</cam:SpecificCaseAttribute>
<cam:SpecificCaseAttribute>
<cam:TypeName>Complaint Inquiry Claim Case</cam:TypeName>
<cam:Name>Formal Corrections</cam:Name>
<cam:Value>false</cam:Value>
</cam:SpecificCaseAttribute>
<cam:SpecificCaseAttribute>
<cam:TypeName>Complaint Inquiry Claim Case</cam:TypeName>
<cam:Name>Complexity</cam:Name>
</cam:SpecificCaseAttribute>
</Case>
我在XMLSpy中遇到以下错误:
Wrong occurrence to match required sequence type
Details
XPTY0004: The parameter value ('15' item(s)) at position '1' of the 'concat' function has the wrong occurrence to match the sequence type xs:anyAtomicType ('zero or one')
答案 0 :(得分:0)
看起来您的xslt处理器无法决定选择三个名称/值中的哪一个。 Saxon 9适用于这个xpath并且选择了第一个Name和第一个Value,因此,对xslt处理器一无所知(我猜它是旧版本的saxon,因为错误代码是xpath2特定的),我建议重写你的xpath:
concat(//*[local-name() = 'Name']/text()[1], '-' , //*[local-name() = 'Value']/text()[1])
答案 1 :(得分:0)
假设您首先通过添加结束</cam:SpecificCase>
标记来纠正XML格式正确,此XPath:
concat((//*[local-name() = 'Name'])[1], '-' , (//*[local-name() = 'Value'])[1])
将评估第一个cam:Name
和cam:Value
元素的连接字符串值:
'Content Corrections-false'
答案 2 :(得分:0)
如果你想输出所有的值,那么一种方式就是http://xsltransform.net/pPqsHTd所示,它有
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:cam="http://my.namespace/CaseManagement" exclude-result-prefixes="cam">
<xsl:output indent="yes" />
<xsl:template match="cam:SpecificCase">
<example1>
<xsl:value-of select="cam:SpecificCaseAttribute/concat(cam:Name, '-', cam:Value)"/>
</example1>
</xsl:template>
</xsl:transform>
并输入样本输出
<example1>Content Corrections-false Formal Corrections-false Complexity-</example1>