Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的xmldiff问题_Php_Xml_Xmldiff - Fatal编程技术网

php中的xmldiff问题

php中的xmldiff问题,php,xml,xmldiff,Php,Xml,Xmldiff,我在使用xmldiff包时遇到一些问题。我使用的是xmldiff包0.9.2;PHP 5.4.17;Apache 2.2.25 例如,我有两个xml文件:“from.xml”和“to.xml” 文件“from.xml”包含: <?xml version="1.0" encoding="UTF-8"?> <root> <rott> <NDC>321</NDC> <NDC>123</NDC>

我在使用xmldiff包时遇到一些问题。我使用的是xmldiff包0.9.2;PHP 5.4.17;Apache 2.2.25

例如,我有两个xml文件:“from.xml”和“to.xml”

文件“from.xml”包含:

<?xml version="1.0" encoding="UTF-8"?> 
<root>  
 <rott>   
  <NDC>321</NDC> 
  <NDC>123</NDC>  
 </rott>   
</root>
我在“differences.xml”文件中得到结果:


321
请您对以下内容发表评论:

<dm:delete>
  <NDC/>
</dm:delete>

来了


另外,请告知我是否有一种方法可以在不考虑xml节点顺序的情况下区分两个xml文件?

您看到的是格式中的差异。从那一页开始:

用于输入子树相同的位置

代码段中的文档具有部分相同的子树。libdiffmark将执行的指令实际上是

  • 删除整个子树
  • 复制1个节点,这意味着两个文档中的节点相同,因此不要触摸它
  • 插入1个新节点
节点的顺序很重要。请考虑一下,如果忽略节点顺序,差异会是什么样子。假设您有42个节点,其中一些节点是相同的,那么如何将复制指令应用于计数?对于diff来说,使用两个文档的精确节点顺序要容易得多。我发现了一个有趣的阅读,关于为什么节点顺序很重要


谢谢。

您看到的是格式中的差异。从那一页开始:

用于输入子树相同的位置

代码段中的文档具有部分相同的子树。libdiffmark将执行的指令实际上是

  • 删除整个子树
  • 复制1个节点,这意味着两个文档中的节点相同,因此不要触摸它
  • 插入1个新节点
节点的顺序很重要。请考虑一下,如果忽略节点顺序,差异会是什么样子。假设您有42个节点,其中一些节点是相同的,那么如何将复制指令应用于计数?对于diff来说,使用两个文档的精确节点顺序要容易得多。我发现了一个有趣的阅读,关于为什么节点顺序很重要


谢谢。

您看到的是格式中的差异。从那一页开始:

用于输入子树相同的位置

代码段中的文档具有部分相同的子树。libdiffmark将执行的指令实际上是

  • 删除整个子树
  • 复制1个节点,这意味着两个文档中的节点相同,因此不要触摸它
  • 插入1个新节点
节点的顺序很重要。请考虑一下,如果忽略节点顺序,差异会是什么样子。假设您有42个节点,其中一些节点是相同的,那么如何将复制指令应用于计数?对于diff来说,使用两个文档的精确节点顺序要容易得多。我发现了一个有趣的阅读,关于为什么节点顺序很重要


谢谢。

您看到的是格式中的差异。从那一页开始:

用于输入子树相同的位置

代码段中的文档具有部分相同的子树。libdiffmark将执行的指令实际上是

  • 删除整个子树
  • 复制1个节点,这意味着两个文档中的节点相同,因此不要触摸它
  • 插入1个新节点
节点的顺序很重要。请考虑一下,如果忽略节点顺序,差异会是什么样子。假设您有42个节点,其中一些节点是相同的,那么如何将复制指令应用于计数?对于diff来说,使用两个文档的精确节点顺序要容易得多。我发现了一个有趣的阅读,关于为什么节点顺序很重要


谢谢。

如果文档结构已知,我想您可以简单地对必要的部分进行排序。这里有一个关于它的例子。基于此,我介绍了一些示例,可以按节点值对文档进行排序(仅举个例子),请看这里

documentlibrary.xml

<?xml version="1.0"?>
 <library>
<book id="1003">
    <title>Jquery MVC</title>
    <author>Me</author>
    <price>500</price>
</book>
<book id="1001">
    <title>Php</title>
    <author>Me</author>
    <price>600</price>
</book>
<book id="1002">
    <title>Where to use IFrame</title>
    <author>Me</author>
    <price>300</price>
</book>
<book id="1002">
    <title>American dream</title>
    <author>Hello</author>
    <price>300</price>
</book>
</library>

jquerymvc
我
500
Php
我
600
在哪里使用IFrame
我
300
美国梦
你好
300
PHP代码,按


如果文档结构已知,我认为您可以简单地对必要的部分进行排序。这里有一个关于它的例子。基于此,我介绍了一些示例,可以按节点值对文档进行排序(仅举个例子),请看这里

documentlibrary.xml

<?xml version="1.0"?>
 <library>
<book id="1003">
    <title>Jquery MVC</title>
    <author>Me</author>
    <price>500</price>
</book>
<book id="1001">
    <title>Php</title>
    <author>Me</author>
    <price>600</price>
</book>
<book id="1002">
    <title>Where to use IFrame</title>
    <author>Me</author>
    <price>300</price>
</book>
<book id="1002">
    <title>American dream</title>
    <author>Hello</author>
    <price>300</price>
</book>
</library>

jquerymvc
我
500
Php
我
600
在哪里使用IFrame
我
300
美国梦
你好
300
PHP代码,按


如果文档结构已知,我认为您可以简单地对必要的部分进行排序。这里有一个关于它的例子。基于此,我介绍了一些示例,可以按节点值对文档进行排序(仅举个例子),请看这里

documentlibrary.xml

<?xml version="1.0"?>
 <library>
<book id="1003">
    <title>Jquery MVC</title>
    <author>Me</author>
    <price>500</price>
</book>
<book id="1001">
    <title>Php</title>
    <author>Me</author>
    <price>600</price>
</book>
<book id="1002">
    <title>Where to use IFrame</title>
    <author>Me</author>
    <price>300</price>
</book>
<book id="1002">
    <title>American dream</title>
    <author>Hello</author>
    <price>300</price>
</book>
</library>

jquerymvc
我
500
Php
我
600
在哪里使用IFrame
我
300
美国梦
你好
300
PHP代码,按


如果文档结构已知,我认为您可以简单地对必要的部分进行排序。这里有一个关于它的例子。基于此,我介绍了一些示例,可以按节点值对文档进行排序(仅举个例子),请看这里

documentlibrary.xml

<?xml version="1.0"?>
 <library>
<book id="1003">
    <title>Jquery MVC</title>
    <author>Me</author>
    <price>500</price>
</book>
<book id="1001">
    <title>Php</title>
    <author>Me</author>
    <price>600</price>
</book>
<book id="1002">
    <title>Where to use IFrame</title>
    <author>Me</author>
    <price>300</price>
</book>
<book id="1002">
    <title>American dream</title>
    <author>Hello</author>
    <price>300</price>
</book>
</library>

jquerymvc
我
500
Php
我
600
在哪里使用IFrame
我
300
美国梦
你好
300
PHP代码,按


So,简而言之:有一个
插入
删除
复制
,但没有一个
移动
,因此这是由其他3个的组合来处理的。因此,简而言之:有一个
插入
删除
复制
,但没有一个
移动
,因此这是由其他3个组合来处理的
<?php

$dom = new DOMDocument();
$dom->load('library.xml');
$xp = new DOMXPath($dom);

$booklist = $xp->query('/library/book');
$books = iterator_to_array($booklist);


function sort_by_title_node($a, $b)
{
    $x = $a->getElementsByTagName('title')->item(0);
    $y = $b->getElementsByTagName('title')->item(0);

    return strcmp($x->nodeValue, $y->nodeValue) > 0;
}


usort($books, 'sort_by_title_node');

$newdom = new DOMDocument("1.0");
$newdom->formatOutput = true;
$root = $newdom->createElement("library");
$newdom->appendChild($root);
foreach ($books as $b) {
    $node = $newdom->importNode($b,true);
    $root->appendChild($newdom->importNode($b,true));
}

echo $newdom->saveXML();
<?xml version="1.0"?>
<library>
<book id="1002">
    <title>American dream</title>
    <author>Hello</author>
    <price>300</price>
</book>
<book id="1003">
    <title>Jquery MVC</title>
    <author>Me</author>
    <price>500</price>
</book>
<book id="1001">
    <title>Php</title>
    <author>Me</author>
    <price>600</price>
</book>
<book id="1002">
    <title>Where to use IFrame</title>
    <author>Me</author>
    <price>300</price>
</book>
</library>