0

我正在读取一个 XML 文件,并希望将“print”中的 XPath 替换为“@href="*?releaseStatus=RELEASED”,这样我将使其通用以获取实例的第一次出现。我该如何实现?

use XML::LibXML;

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file("type_book.xml");

for my $chapter_node ($doc->findnodes('/book/contents'))
{
print $chapter_node->findvalue('locator[@href ="/book/isbn/979-0-4444-1000-17/book-part/chapter/bk444444ch1?releaseStatus=RELEASED"]/@title');
}

XML 文件:

<book>
<contents>
<locator href="/book/isbn/979-0-4444-1000-17/book-part/chapter/bk444444ch1?  releaseStatus=RELEASED" role="http://www.abc.org/roles/book-part-locator" title="Photonic crystal light-emitting sources">
</locator>
<locator href="/book/isbn/979-0-4444-1000-17/book-part/chapter/bk444444ch1?releaseStatus=RELEASED&amp;format=pdf" role="http://www.abc.org/roles/book-part-pdf-locator" title="Photonic crystal light-emitting sources">
</locator>
<locator href="/book/isbn/979-0-4444-1000-17/book-part/chapter/bk444444ch1?releaseStatus=RELEASED&amp;format=epub" role="http://www.abc.org/roles/book-part-epub-locator" title="Photonic crystal light-emitting sources">
</locator>
</contents>
</book>
4

1 回答 1

2

够好了?

locator[contains(@href, "?releaseStatus=RELEASED")]/@title

使用 XPath 2 函数(不确定 XML::LibXML 是否支持)

locator[fn:matches(@href, "^.*(\?|&)releaseStatus=RELEASED(&|$)")]/@title

您可能需要与fn关联http://www.w3.org/2005/xpath-functions

于 2013-07-14T17:30:36.363 回答