使用XPath删除元素

时间:2016-10-12 14:29:47

标签: erlang elixir

因此,假设我有一个XML文件,我想使用他们的XPath从中删除一些节点。我如何做到这一点,是否可能首先使用xmerlerlsom或其他可能的东西?

如果XPath没有简单的方法,那么从XML中删除元素的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

作为stated by W3C

  

XPath是一种用于处理XML文档部分的语言

以上字面意思是XPath查询 XML,而不是修改它。修改XML文档的常用方法是以下方法之一:

  • 使用XSLT转换架构;
  • 将内容读入内存,修改内容并将其保存回文件。

AFAIU,前者超出了本问题的范围。对于后者,可以使用Exsom library,这是“erlsom XML解析库周围的Elixir包装器。”

假设我们从Excom examples获取了xmlxsd

<?xml version="1.0" encoding="UTF-8"?>
<foo attr="yo">
  <bar>1</bar>
  <bar>2</bar>
</foo>

有人可能会这样做以删除第二个bar节点(大部分代码都是从Excom测试中获取的:

{ :ok, model } = Exsom.XSD.File.parse("complex.xsd")
{ :ok, instance, _ } = Exsom.File.parse("complex.xml", model)
#⇒ {:ok, {:foo_type, [], 'yo', ['1', '2']}}

根据您的需要进行修改,例如使用bar

删除2元素
instance = {:foo_type, [], 'yo', ['1']}
{ :ok, binary_xml } = Exsom.compose(instance, model, [{ :output, :binary }])
#⇒ {:ok, "<foo attr=\"yo\"><bar>1</bar></foo>"}

现在您可以将binary_xml写入文件。