我正在尝试通过解析文本从XML返回值。 我有一个需要查找特定值的工作,然后在下面的特定元素中返回文本。
但是,当我想从attritube而不是元素中返回文本时,我无法使其正常工作。
在这里您可以看到XML文档的示例:
<?xml version = '1.0' encoding = 'UTF-8'?>
<ADI3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Asset xsi:type="offer:OfferType" uriId="url.com/assetID">
<offer:BillingId>DUMMY</offer:BillingId>
</Asset>
<Asset xsi:type="title:TitleType">
<core:Description deprecated="true" xmlns:core="urn:cablelabs:md:xsd:core:3.0">Title Package</core:Description>
<core:Ext xsi:type="ExtType" xmlns:core="urn:cablelabs:md:xsd:core:3.0">
<TestipediaInfo>
<test:SeriesInfo xml:lang="en" seasonNumber="2" episodeNumber="9">
<test:SeriesBrief>A very nice title</test:SeriesBrief>
<test:EpisodeInfo>
<test:SummaryShort>Peter and the crew travel to Greenland.</test:SummaryShort>
</test:EpisodeInfo>
</test:SeriesInfo>
</TestipediaInfo>
</core:Ext>
</Asset>
<Asset xsi:type="offer:OfferType" uriId="url.com/assetID">
<core:Description deprecated="true" xmlns:core="urn:cablelabs:md:xsd:core:3.0">Series Poster</core:Description>
<content:SourceUrl>A-typical-file-name_1000x1500.jpg</content:SourceUrl>
</Asset>
</ADI3>
我使用下面的代码:
File file = new File("stackoverflowtest.xml")
def str = file.text
def xmlSlurper = new XmlSlurper(false,false)
def root = xmlSlurper.parseText(str)
def path = 'Asset."core:Ext".TestipediaInfo."test:SeriesInfo".find{it.@"xml:lang" == "en"}."test:EpisodeInfo"."test:SummaryShort"'
def xpathRes = Eval.x(root, "x.$path")
print(xpathRes)
打印test:SummaryShort中的值
但是,我希望能够做类似的xPath(例如'Asset."core:Ext".TestipediaInfo."test:SeriesInfo".find{it.@"xml:lang" == "en"}."test:EpisodeInfo"."test:SummaryShort"'
当<content:SourceUrl>
包含“系列海报”时从<core:Description deprecated="true" xmlns:core="urn:cablelabs:md:xsd:core:3.0">Series Poster</core:Description>
返回文本。
答案 0 :(得分:0)
不确定为什么要使用eval
...
您应该可以运行:
root.Asset.findAll { it.'core:Description'.@deprecated == 'true' }.'content:SourceUrl'*.text()
要返回一个列表,其中包含已弃用true作为Description属性的任何节点的所有SourceUrl文本