Я играю с синтаксисом xpath и застрял на одной проблеме:
Учитывая следующее xml
<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
<employees>
<employee id="1">
<name>
Johnny Dapp
<br />
<br />
</name>
</employee>
<employee id="2"><name>Al Pacino</name></employee>
<employee id="3"><name>Robert De Niro</name></employee>
<employee id="4"><name>Kevin Spacey</name></employee>
<employee id="5"><name>Denzel Washington</name></employee>
<notanemployee id="14"><name>HELLO WORLD</name></notanemployee>
</employees>
<foo:companies>
<foo:company id="6">Tata Consultancy Services</foo:company>
<foo:company id="7">Wipro</foo:company>
<foo:company id="8">Infosys</foo:company>
<foo:company id="9">Microsoft</foo:company>
<foo:company id="10">IBM</foo:company>
<foo:company id="11">Apple</foo:company>
<foo:company id="12">Oracle</foo:company>
<bar:company id="13">Google</bar:company>
</foo:companies>
</root>
Я впервые попробовал
//text()
который, насколько мне известно, должен выбрать все текстовые узлы, и он делает.
Однако я тогда попытался
//text()[1]
, ожидая, что он выберет первый текстовый узел в XML, которыйдолжен быть текстовым узлом, состоящим из разрыва строки, а затем нескольких пробелов (после открывающего тега корня и до открывающего тега сотрудников), но, к моему удивлению, он вернул это
Text='
Johnny Dapp
'
Text='Al Pacino'
Text='Robert De Niro'
Text='Kevin Spacey'
Text='Denzel Washington'
Text='HELLO WORLD'
Text='
'
Text='Tata Consultancy Services'
Text='Wipro'
Text='Infosys'
Text='Microsoft'
Text='IBM'
Text='Apple'
Text='Oracle'
Text='Google'
Как это вообще делаетсмысл?Как он вообще возвратил набор текстовых узлов для начала?
Затем я попытался
(//text())[1]
и он вернул первый текстовый узел xml.Чем это отличается от
//text()[1]
Кстати, я использую два онлайн-теста xpath:
https://www.freeformatter.com/xpath-tester.html#ad-output
https://www.webtoolkitonline.com/xml-xpath-tester.html?