- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如何通过 XMLParser 真正删除一个节点:
x='''<X>
<A>
<B c3='1'>
<C1>a</C1>
<C2>b</C2>
</B>
<B c3='2'>
<C1>e</C1>
<C2>e</C2>
</B>
<B c3='3'>
<C1>f</C1>
<C2>f</C2>
</B>
</A>
</X>
'''
xml=new XmlParser().parseText(x)
def nodeToDel=xml.A.B.find{it.@C1='a'}
xml.remove(nodeToDel)
println xml
new XmlNodePrinter(new PrintWriter(new FileWriter(new File('c:/temp/a.xml')))).print(xml)
似乎有效但是!!!!当我将其翻译成我的问题时,它仍然保存原始 xml althoguh 在运行 remove-method 后返回 true。
我用谷歌搜索了一下,找到了这个 BUG .看来我现在受到了影响。我该如何解决?有没有解决方法,或者我必须回到根源并开始按行复制它......?? groovy 在这里真的很普通 :-/
编辑:如下所述,并从中获得了经验,无法通过这种方式删除等于“e”的标签。只有第一个记录将被删除。我认为是xml格式有问题。没有所需的格式:
<A x='1' y='2'></A>
并以格式
<A> <x>1</x> <y>2</y> </A>
有人能重现这个错误吗?
edit2:我正在使用 GroovyConsole 1.8.0。在示例中添加了 c3 属性。试图用同样的方法删除它,同样的错误:第一个 B 部分被删除了......现在最令人印象深刻的错误:用其他代码尝试:
def xml=new XmlParser().parseText(x)
xml.A.remove(xml.A.B.find{it.@'c3'= '3'}) //want to remove third section
new XmlNodePrinter(new PrintWriter(new FileWriter(new File('c:/temp/a.xml')))).print(xml)
结果第一节属性c3改成3?!?!?!?!?卧槽……
我一直在努力寻找一个星期的解决方案,这很累......
有人有想法吗?
最佳答案
删除节点的工作方式与其他 DOM API 非常相似。您必须将要删除的节点传递给其父节点的删除方法。
=
运算符也是 Groovy 中的赋值运算符。 it.@C1 = 'a'
会将 'a'
分配给每个 B
节点的 C1
属性文件。由于该赋值的结果是 'a'
,它被 Groovy 强制为 true
,因此 find
将始终返回它遇到的第一个节点。
xml=new XmlParser().parseText(x)
def nodeToDel=xml.A.B.C1.find { it.text() == 'a' }
def parent = nodeToDel.parent()
parent.remove(nodeToDel)
关于xml - 真正删除 XMLParser 对象 Groovy 中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7201111/
我在从以下 XML 解析属性值时遇到问题: s=''' ''' def contextroot def xml = new XmlParser(false,fa
我在从以下 XML 解析属性值时遇到问题: s=''' ''' def contextroot def xml = new XmlParser(false,fa
我想解析一个看起来像这样的 XML 标记: 我目前正在使用 BlockRSSParser 来做这件事。 我试过用下面的方法来做: - (void)parser:(NSXMLParser *)pars
这个问题在这里已经有了答案: how to parse the local XML correctly? (1 个回答) 关闭 3 年前。 我试图用 let contentString = "abc
我正在使用 Swift 编写一个 RSS 阅读器应用程序。我使用内置类 XMLParser做解析工作。 XMLParser当遇到一些奇怪的标签时会停止,例如 (此标签与结束标签 匹配)。错误代码为
我正在解析的 wiki 页面丢失了大量空白,我认为这是解析器的问题。我的 Groovy 脚本中有这个: @Grab(group='org.ccil.cowan.tagsoup', module='ta
我已经遵循了多个关于如何为 Android 平台设置 SAX XML 解析器的在线教程,但它们似乎都不起作用!有什么问题?这是我的代码: 进口: import java.net.URL; import
所以我有一个 XML 文件,我使用 NSXMLParser 处理它。所需的元素是 我需要检索我试过的 url: -(void)parser:(NSXMLParser *)parser didStar
我正在创建一个需要读取 XML file 的 iPhone 应用程序 属性 @property (nonatomic, strong) NSString *name; @property (nonat
我有一个使用 Swift 的 XMLParser,运行良好。但是,有时会出现与我想要的实际节点同名的节点。因此,当这些额外的节点出现时,一切都会变得困惑。这是良好场景的示例。这已经被简化了一点以帮助解
有一段时间我一直在使用 SWXMLHash用于在我的项目中解析 XML,但现在它目前不支持 Swift 3.0,所以我决定开始使用我自己的 XML 解析类来实现这一点。 我已经完成了基础工作,但是没有
我知道 xmlreader 和其他基于树的解析器(如 simplexml 和 dom)之间的区别。但是xmlreader和xmlparser有什么区别呢?使用一个比另一个有什么好处吗? 我需要解析比较
我做了一个 RSSParser,我不想将日期从 yyyy-MM-dd'T'HH:mm:ssZ 转换为 dd/MM/yyyy: func setDateForCell(cell:ActuTblCell,
我有一些 XML 文件,如果 name == testName,我想更改 name。所以我写了这样的东西,但它不起作用。我哪里做错了?它向我打印参数类型不匹配,我不知道为什么。 String xmlD
我正在使用 groovy XmlParser 读取 xml- 文件,例如: def myXMLContent = new XmlParser().parse(new File("myFile.xml"
我在 React Native App 中工作,只是想执行这段代码 fetch('https://ad13.adfarm1.adition.com/banner?sid=3915124&wpt=X.x
我正在尝试从预设的 xml 文件中提取值,但当我尝试检查该值是什么时,我总是得到 null。 if (pulled.equals("preset")) { presetName = xmlPa
在我的 VC 中,我调用了一个 XML 网络服务。根据结果,我可能会转向另一家 VC。我已经从我的代码中删除了业务逻辑,只留下重要的部分。这是我的代码的简短版本: func parser(_ pa
我想解析和下载当前的 EUR - USD 汇率。我决定从 the European Central Bank Feed 中获取值. 我正在使用 CheatyXML XMLParser 扩展。 如何获取
我有一个实用程序方法,它使用创建为 etree.XMLParser(recover=True) 的解析器来解析 XML。我想在单元测试中测试失败场景。除了空输入抛出 lxml.etree.XMLSyn
我是一名优秀的程序员,十分优秀!