Php 如何获取特定名称空间的整个XML元素及其标记?

Php 如何获取特定名称空间的整个XML元素及其标记?,php,xml-namespaces,xml-parsing,Php,Xml Namespaces,Xml Parsing,我找不到像这样的具体问题,所以我正在发布。希望这将是通用的 我有一个包含XML标记的文件“数据….”。还有很多其他的东西。我需要捕获标记中(包括)的所有内容 我很乐意听取关于如何进行的建议 提前谢谢 David使用DomXml是首选选项,因为它不会限制您搜索其他标记/数据 但使用正则表达式生成的代码要少得多,所以如果您只需要这些标记,我会选择preg_match_all $string = '<?xml version="1.0"?> <root> <w:t

我找不到像这样的具体问题,所以我正在发布。希望这将是通用的

我有一个包含XML标记的文件“
数据….
”。还有很多其他的东西。我需要捕获
标记中(包括)的所有内容

我很乐意听取关于如何进行的建议

提前谢谢


David

使用DomXml是首选选项,因为它不会限制您搜索其他标记/数据

但使用正则表达式生成的代码要少得多,所以如果您只需要这些标记,我会选择preg_match_all

$string = '<?xml version="1.0"?>
<root>
    <w:t>some data...</w:t>
    <not-captured>data data</not-captured>
    <w:t>more data...</w:t>
</root>
</xml>';

preg_match_all('/<w\:t>.*<\/w\:t>/is', $string, $matches);
var_dump($matches);
$string='1!'
一些数据。。。
数据数据
更多数据。。。
';
preg_match_all('/.*/is',$string,$matches);
var_dump($matches);
答复:

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(23) "<w:t>some data...</w:t>"
    [1]=>
    string(23) "<w:t>more data...</w:t>"
  }
}
数组(1){
[0]=>
阵列(2){
[0]=>
字符串(23)“一些数据…”
[1]=>
字符串(23)“更多数据…”
}
}

编辑:/regex中添加了修饰符

添加到前面的答案中,我会在末尾的I后面加一个小写的“s”,以处理换行

下面是Gumbo先生的观点。是的,请在“s”之后的大写字母中添加“U”,以使表达式不那么贪婪,否则它将无法按预期工作

e、 g


preg_match_all('/.*/isU',$string,$matches)

您应该真正使用XML DOM解析器,如:


您应该使用真正的XML解析器(如DOM等),而不是黑客。关于使用PHP解析XML文件并捕获其中的数据,还有很多问题。谢谢各位。这是一个来自(350页)MSWord文档的一次性转换,我希望最终将其转换为xml或mysql文件。是否可能重复?谢谢你,伊万。。。我得到了它。。我不能在这里发布脚本,因为我是一个noob,但它与您的代码是一致的。您不会得到那个结果,因为
*
是贪婪的。对不起,我错过了:。表示除新行字符以外的任何字符/s修饰符将抑制该行为并将其删除。陷阱新线一个带有正则表达式的陷阱我有很多东西要学,谢谢大家的参与。现在我有了一个非常粗糙但兼容的XML文件,我必须弄清楚如何为特定元素分配子标记。元素是希腊文的,所以不容易。。
$string = '<?xml version="1.0"?>
<root xmlns:w="http://example.com/">
    <w:t>some data...</w:t>
    <not-captured>data data</not-captured>
    <w:t>more data...</w:t>
</root>';
$doc = simplexml_load_string($string);
foreach ($doc->xpath('//w:t') as $elem) {
    var_dump($elem->asXML());
}
$doc->registerXPathNamespace('w', 'http://example.com/');