求助一个需要替换 XML 特定节点的问题,使用 Javascript

2022-07-19 16:37:51 +08:00
 WangLiCha

目前的工作需要转换一些 XML 的结构,具体来说的话是这样:

这是转换前的结构,<hrow>节点下固定有两个子节点,第一个子节点固定是<hi>,节点的值是 A ,第二个节点固定是<htag>,<htag>也固定有两个子节点,不过节点类型没有限制,这两个节点的值是 B 和 C 。准确的来说这个需要转换的结构的判定标准是“<hrow>节点下的第 2 个子节点是<htag>”

<hrow>
  <hi>A</hi>
  <htag>
    <hi>B</hi>
    <hi>C</hi>
  </htag>
</hrow>

这是转换后前的结构,<hrow>节点下还是固定有两个子节点,第一个子节点替换为固定<hsub>,节点的值是 A 和 B ,第二个替换为固定<hi>,节点的值是 C

<hrow>
  <hsub>
    <hi>A</hi>
    <hi>B</hi>
  </hsub>
  <hi>C</hi>
</hrow>

这样的结构会在 XML 中出现(而不是一整个完整的 XML ),需要找到 XML 中对应的结构并替换。此外也有可能出现嵌套结构的情况,比如这样:

<hrow>
  <hi>A</hi>
  <htag>
    <hrow>
      <hi>B</hi>
      <htag>
        <hi>C</hi>
        <hi>D</hi>
      </htag>
    </hrow>
    <hi>E</hi>
  </htag>
</hrow>

这个结构按照规则转换过来是这样:

<hrow>
  <hsub>
    <hi>A</hi>
    <hrow>
      <hsub>
        <hi>B</hi>
        <hi>C</hi>
      </hsub>
      <hi>D</hi>
    </hrow>
  </hsub>
  <hi>E</hi>
</hrow>

感觉这是个涉及到数据结构的问题,不过因为没有实际学过所以做起来有点棘手。之前也试过用正则表达式,但是应该不够用,也了解过 XSLT ,似乎也不太能很好的解决问题,目前看来是真的只能用 DOMParser 读取 XML 然后操作树了?这个就真的没什么思路了,求 V 友们指点一下

931 次点击
所在节点    程序员
3 条回复
viakiba
2022-07-19 18:40:25 +08:00
js 里 也有 xpath ,应该能组合出你的需求
fnmain
2022-07-19 18:45:13 +08:00
duan602728596
2022-07-19 21:10:51 +08:00
DOMParser 现成的解析器为啥就不能用了?你这个本来就是要操作树啊,换哪个解析器都是这个操作啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/867310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX