我還沒有發現類似的線程解決方案,所以我希望有人能幫助我。我有XML如下(節選):的XPath CONCAT同級的所有節點匹配
<root>
<identificationInfo>
<MD_DataIdentification>
<descriptiveKeywords>
<MD_Keywords>
<keyword>
<gco:CharacterString>Atmospheric conditions</gco:CharacterString>
</keyword>
<type>
<MD_KeywordTypeCode codeListValue="theme"/>
</type>
</MD_Keywords>
</descriptiveKeywords>
<descriptiveKeywords>
<MD_Keywords>
<keyword>
<gco:CharacterString>Agriculture</gco:CharacterString>
</keyword>
<keyword>
<gco:CharacterString>Biodiversity</gco:CharacterString>
</keyword>
<type>
<MD_KeywordTypeCode codeListValue="socialBenefitArea"/>
</type>
</MD_Keywords>
</descriptiveKeywords>
我想是連接類型和關鍵字的字符串,所以我獲取列表看起來像以下:
theme:Atmospheric conditions
socialBenefitArea:Agriculture
socialBenefitArea:Biodiversity
我嘗試了以下解決方案(XPath 1.0或XPath 2.0都可以使用),但始終只有第一個匹配的「主題:大氣條件」返回。
for $n in /*/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords return string-join(($n/gmd:type/*/@codeListValue, ':', $n/gmd:keyword/*/text()), '')
/*/gmd:identificationInfo/*/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/concat(*/text(), ':', ../gmd:type/*/@codeListValue)
//gmd:descriptiveKeywords/*/string-join((gmd:type/*/@codeListValue, gmd:keyword/*/text()[1]), ':')
//gmd:descriptiveKeywords/*/gmd:keyword/concat(following-sibling::gmd:type/*/@codeListValue, ':', ./*/text())
如果XPath的看起來是正確的,我在Java中與Saxon-HE 9.x
這樣做。
我沒查出是評估返回一個字符串,而不是一個NODESET,我可能需要有多個結果。哪個XPath會返回一個NODESET?
感謝您的幫助!