我有一個Go程序與輸入流一起工作,即os.Stdin
:非常大的XML文件,所以我無法處理這一切都一次。檢索元素的「outerxml」(如innerxml,但包括元素本身)
我想提取所有特定屬性的XML元素進行後期處理。
我很難確定提取元素,並獲取相關的開始和結束元素。不過,我不知道如何將整個元素作爲字符串來轉儲,而不是僅將內部XML轉儲。
例如,假設我有以下XML:
<a>
<b somethingUseful="1">
<c>Hello</c>
<d>world</d>
</b>
<e>
<foo/>
</e>
<!-- Imagine there were 1 billion lines in between -
I need to stream this! -->
<b somethingUseful="321">
<c>Hello again</c>
</b>
</a>
在這個例子中,我想每個<b>
元素的輸出,從開始到結束。
使用innerxml
與DecodeElement
,我能走這麼遠,以流方式:
Here comes a B:
<c>Hello</c>
<d>world</d>
Here comes a B:
<c>Hello again</c>
如此接近,但它缺少<b>
標記(和屬性)本身。我一直沒能弄清楚如何在不犧牲解碼的流式性質的情況下做出最後一步。
要清楚,是我想要的輸出是一樣的東西:
Here comes a B:
<b somethingUseful="1">
<c>Hello</c>
<d>world</d>
</b>
Here comes a B:
<b somethingUseful="321">
<c>Hello again</c>
</b>
下面是所宣佈的那樣這個例子中操場,什麼我在得到這個地步完成:
https://play.golang.org/p/XqJY_1pa9j
噢噢噢,這是一個很好的開始!我會尋找任何方法讓它變得更漂亮並回復你:D非常感謝! –
假設我們在這裏使用'os.Stdin' - 所以你不能將它作爲兩個文件打開(除非有辦法做到這一點?:O),但如果你很棘手,你可以做類似的事情。看起來這就是多功能打印機正在做的事情。 –
啊,那麼是的,我想你會需要複製到'ioutil.Discard'愚蠢 – nothingmuch