用于标识XML数据更改的命名空间?

时间:2018-01-09 21:50:49

标签: xml xslt xml-parsing xml-namespaces

假设XML文件中的数据名为“1jan2018.xml”:

"1jan2018.xml"
<instrument id="12345" xmlns="12345">
    <type>guitar</guitar>
    <maker>Fender</maker>
    <model>Stratocaster 1979</model>
    <condition>used</condition>
    <price>4500</price>
</instrument>
<instrument id="12225" xmlns="12225">
    <type>guitar</guitar>
    <maker>Ibanez</maker>
    <model>JS Signature 100S</model>
    <condition>New</condition>
    <price>3400</price>
</instrument>

第二天,在名为“2jan2018.xml”的文件中价格发生变化:

"2jan2018.xml"
<instrument id="12345" xmlns="12345">
    <type>guitar</guitar>
    <maker>Fender</maker>
    <model>Stratocaster 1979</model>
    <condition>used</condition>
    <price>4400</price>
</instrument>
<instrument id="12225" xmlns="12225">
    <type>guitar</guitar>
    <maker>Ibanez</maker>
    <model>JS Signature 100S</model>
    <condition>New</condition>
    <price>3200</price>
</instrument>

默认命名空间的原因:避免为每个子元素添加前缀。 假设:添加与instrument / @ id相同的名称空间将跟踪每个子元素的数据/值变化。假设有一个系统负责将默认命名空间添加到原始文件中 目标1 :找到跟踪子节点更改的方法。
目标2 :仅在第二天生成的xml文件中生成“已更改的数据”。我在想XSLT可以用于这个目标(我在大声思考 - 这里不是专家)。 例如 在“2jan2018.xml”文件中,数据应该只是

<instrument id="12345" xmlns="12345">
    <price>4400</price>
</instrument>
<instrument id="12225" xmlns="12225">
    <price>3200</price>
</instrument>

问题

  • 使用默认命名空间是一个跟踪目的的好主意吗? (目标1)。如果没有,跟踪XML世界中数据变化的最佳方法是什么?
  • 我知道这本身应该是一个单独的问题,但XSLT是否可以满足目标2或者我应该朝着完全不同的方向寻找?至少如果我能得到这个方向......

1 个答案:

答案 0 :(得分:2)

这是一个非常糟糕的主意。它不是为什么命名空间设计的,它会让你遇到各种各样的实际困难。例如,使用XPath在多个名称空间中查找元素变得非常麻烦。