Php 如何获取特定名称空间的整个XML元素及其标记?
我找不到像这样的具体问题,所以我正在发布。希望这将是通用的 我有一个包含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
数据….
”。还有很多其他的东西。我需要捕获
标记中(包括)的所有内容
我很乐意听取关于如何进行的建议
提前谢谢
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/');