XPath: Как сопоставить класс символов в атрибуте? - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть следующий фрагмент XML:

...

<Setting name="HOST1">server1</Setting>
<Setting name="HOST2">server2</Setting>
<Setting name="HOST3">server4</Setting>
<Setting name="HOST4">server8n12</Setting>
...
<!-- Many more such declarations all with the attribute of the form "HOSTNN" -->

Я использую LibXML, чтобы найти узлы, соответствующие HOST

my $dom = XML::LibXML->load_xml(location => $xml)
    or die "Unable to create LibXML object";
my $root = $dom->getDocumentElement();

my @hostnames = $root->findnodes('//Setting[contains(@name,"HOST")]');

Возможно ли указать класс символов вXPath выражение похоже на то, что вы можете указать в регулярном выражении?Например, регулярное выражение Perl:

/^HOST\d+?$/

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010
//Setting[starts-with(@name,"HOST")]
         [translate(substring-after(@name,"HOST"),
                    "0123456789",
                    "")=""]

Редактировать : Я не видел классификатор. Выше будет соответствовать Setting[@name="HOST"]. Чтобы быть более строгим:

//Setting[starts-with(@name,"HOST")]
         [number(substring-after(@name,"HOST")) = 
          substring-after(@name,"HOST")]

Редактировать 2 : Выше это не достаточно строго (будет соответствовать "HOST2.1"). К сожалению.

//Setting[starts-with(@name,"HOST")]
         [substring-after(@name,"HOST")]
         [translate(substring-after(@name,"HOST"),
                    "0123456789",
                    "")=""]
0 голосов
/ 09 ноября 2010

Мой xpath немного ржавый, но я думаю, что это может сработать (или это, или я комбинирую свой css с xpath)

Setting[@name^="HOST"]
...