2015-04-01 40 views
9

我有一个来自客户端的XML文件,它具有大于>且小于<的标志,并且它未通过XML格式检查。 有没有办法解决这个问题,而不要求客户修复文件?有没有办法在XML文件中包含大于或小于符号?

例如

<?xml version="1.0" encoding="UTF-8"?> 

<note Name="PrintPgmInfo <> VDD"> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note> 
+0

如果您不想让客户端修复该文件,那么显而易见的解决方案就是让您自己修复它。如果它是一次性的,编辑它并用预定义的实体引用替换保留的字符;如果这种情况会重复发生,请在您选择的批处理编辑器中编写一个sed脚本或等效代码以进行更改。 (如果您没有选择的批处理编辑器,并且遇到类似的问题,那么您应该了解批处理编辑器并善于处理。) – 2015-04-01 20:22:40

回答

3

你将不得不使用XML转义字符:

" to &quot; 
' to &apos; 
< to &lt; 
> to &gt; 
& to &amp; 

谷歌逃逸XML中的字符以获取更多信息。

1

直接回答你的问题:

有没有办法来解决这个问题,而不要求客户端修复文件?

是“否”。您收到的数据不是有效的XML,并且您拒绝接受它。我强烈建议回到客户端,并说他们必须使用David和Rahul提到的Character Entity References提供有效的XML。

0

明明白白回答你的问题没有,因为XML格式使用这些字符来表示父和子元素,例如,你不能有任何的价值领域的<> XML文件<note><to><from>

扩大对我的回答:当一个Python脚本使用XML library写道:<>,图书馆它们转换为分别&lt&gt。我不相信这是可能的,因为它实际上过滤了<>字符以及字符实体引用。这是有道理的 - XML库正在阻止您中断用于父项xml.etree.cElementTree.Element或任何子项xml.etree.cElementTree.SubElement对象字段的语法。例如,使用在此great answer代码块进行实验:

import xml.etree.cElementTree as ET 

root = ET.Element("root") 
doc = ET.SubElement(root, "doc") 

ET.SubElement(doc, "field1", name="blah").text = "some <value>" 
ET.SubElement(doc, "field2", name="asdfasd").text = "some <other value>" 

tree = ET.ElementTree(root) 
tree.write("filename.xml") 

这产生<root><doc><field1 name="blah">some &lt;value&gt;</field1><field2 name="asdfasd">some &lt;other value&gt;</field2></doc></root>

美化它:

<root> 
    <doc> 
     <field1 name="blah"> 
      some &lt;value&gt; 
     </field1> 
     <field2 name="asdfasd"> 
      some &lt;other value&gt; 
     </field2> 
    </doc> 
</root> 

然而,并没有什么东西手动添加这些字符阻止你:在XML文件中读取和重新写,添加文字,即使它包含<> 。如果你想要一个合适的XML文件,只要确保这些字符只用在注释字段中。

为您的特定问题,你可以从客户端的XML文件中的行读取,那么要么删除<>字符,如果客户需要它们,将它们移动到行的注释部分。部分挑战是你必须离开<note>,`等文件部分...这是具有挑战性的,但它是可能的!

以下是我期望的结果。

<?xml version="1.0" encoding="UTF-8"?> 

<note Name="PrintPgmInfo VDD"> <!-- PrintPgmInfo <> VDD --> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note> 
相关问题