考虑我有一个包含以下数据的文件:
...
<wsdl:message>
...
</wsdl:message>
<wsdl:message>
...
</wsdl:message>
<wsdl:message>
...
</wsdl:message>
...
在第一个<wsdl:message>
和最后一个</wsdl:message>
之间获取所有数据的正确的正则表达式是什么?
或者,(如建议的那样),一个适当的XPath解决方案。
主要想法是我想找到并替换那部分数据。
答案 0 :(得分:1)
只需使用:
//x:message/node()
其中前缀x:
(以托管 XPath的编程语言)绑定到wsdl命名空间 - 这通常称为“注册命名空间”。)
或者,如果您无法注册此命名空间,请使用:
//*[local-name()='message'
and
namespace-uri() = 'http://schemas.xmlsoap.org/wsdl/'
]/node()
答案 1 :(得分:0)
XPath
/*/wsdl:message[fn:position() > 1 and fn:position() < fn:last()]
应该这样做。
修改强>
对于XPath 1.0(以及PHP的代码)
<?php
$string = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:wsdl="/">
<wsdl:message>
One
</wsdl:message>
<wsdl:message>
Two
</wsdl:message>
<wsdl:message>
Three
</wsdl:message>
<wsdl:message>
Four
</wsdl:message>
<wsdl:message>
Five
</wsdl:message>
<wsdl:message>
Six
</wsdl:message>
</root>
XML;
print $string;
$xml = new SimpleXMLElement($string);
print_r($xml->xpath('/*/wsdl:message[position() > 1'.
' and position() < last()]'));
?>