解析XML处理指令

huangapple go评论84阅读模式
英文:

Parsing XML processing instructions

问题

我有一些处理指令,就像下面这样出现在我的XML文件的顶部:

<?ID Object="AUTO_REPORT_OBJECT" Version="1.0"?>

我想使用Go库读取Object和Version属性的值。我正在使用Go 1.19。

我的XML文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<?ID Object="AUTO_REPORT_OBJECT" Version="1.0"?>
<?xml-stylesheet type="text/xsl" href="../XML/ProdRep.xsl"?>
<!DOCTYPE Auto_Report SYSTEM "../XML/ProdRep.dtd" [
        <!ELEMENT Auto_Report (Production_Report+)>
        ]>
<Auto_Report>
    <Production_Report Type="AUTO">
        ...更多标签
    </Production_Report>
</Auto_Report>
<?End?>
英文:

I've some processing instructions like the one below at the top of my XML file:

&lt;?ID Object=&quot;AUTO_REPORT_OBJECT&quot; Version=&quot;1.0&quot;?&gt;

I would like to read Object and Version attributes value using Go libraries. I'm using Go 1.19.

My XML file is like this:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;?ID Object=&quot;AUTO_REPORT_OBJECT&quot; Version=&quot;1.0&quot;?&gt;
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;../XML/ProdRep.xsl&quot;?&gt;
&lt;!DOCTYPE Auto_Report SYSTEM &quot;../XML/ProdRep.dtd&quot; [
        &lt;!ELEMENT Auto_Report (Production_Report+)&gt;
        ]&gt;
&lt;Auto_Report&gt;
    &lt;Production_Report Type=&quot;AUTO&quot;&gt;
        ... more tags
    &lt;/Production_Report&gt;
&lt;/Auto_Report&gt;
&lt;?End?&gt;

答案1

得分: 3

就XML而言,在PI的内容中可以包含任何你喜欢的内容,所以XML解析器无法帮助解决这个问题 - 你必须手动解析内容。

一种选择是将PI的数据部分取出,以"<e "开头,以"/>"结尾,然后通过一个XML解析器进行解析。

英文:

As far as XML is concerned, you can have anything you like in the content of a PI, so XML parsers aren't going to help with this - you have to parse the content by hand.

One option would be to take the data part of the PI, put "<e " at the start and "/>" at the end, and then put it through an XML parser.

答案2

得分: 0

我不懂Go语言,但你可以使用Python 3.11解析这段代码。

import xml.etree.ElementTree as ET

for event, elem in ET.iterparse('your.xml', events=("pi")):
    if event == "pi":
        print(ET.tostring(elem))

请注意,这是Python代码,用于解析XML文件。它使用xml.etree.ElementTree模块提供的iterparse函数来遍历XML文件中的元素。在遍历过程中,如果事件类型是"pi"(处理指令),则打印出该元素的内容。

英文:

I don't know Go, but you can parse this with python 3.11.

import xml.etree.ElementTree as ET

for event, elem in ET.iterparse(&#39;your.xml&#39;, events=(&quot;pi&quot;)):
    if event == &quot;pi&quot;:
        print(ET.tostring(elem))

huangapple
  • 本文由 发表于 2022年11月28日 18:45:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/74599412.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定