Я пытаюсь вернуть значения из 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>
содержит «Плакат серии».