0

考虑我有一个包含以下数据的文件:

  ...
    <wsdl:message>
      ...
    </wsdl:message>
    <wsdl:message>
      ...
    </wsdl:message>
    <wsdl:message>
      ...
    </wsdl:message>
  ...

什么是合适的正则表达式来获取第一个<wsdl:message>和最后一个之间的所有数据</wsdl:message>

或者,(如已建议的那样)适当的 XPath 解决方案。

主要想法是我想找到并替换那部分数据。

4

2 回答 2

1

只需使用

//x:message/node()

其中前缀x:绑定(在托管XPath 的编程语言中)到 wsdl 名称空间——这通常称为“注册名称空间”)。

或者,如果您无法注册此命名空间,请使用

//*[local-name()='message' 
  and 
    namespace-uri() = 'http://schemas.xmlsoap.org/wsdl/'
    ]/node()
于 2012-07-18T03:14:48.770 回答
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()]'));

?>
于 2012-07-17T18:25:53.293 回答