2010-05-27 24 views
1

我正在嘗試在字符串中查找完整的XML對象。他們已被放入字符串XmlSerializer,但可能會或可能不完整。我已經玩弄了使用正則表達式的想法,因爲它看起來像是他們爲之構建的那種東西,除了我試圖解析XML。如何匹配字符串中的完整XML對象?

我試圖找到形式完整對象:

<?xml version="1.0"?> 
<type> 
    <field>value</field> 
    ... 
</type> 

我的想法是找到<?xml version="1.0"?><type></type>,但如果一個字段具有相同的名稱type,它顯然不會正則表達式工作。

有很多關於XML解析器的文檔,但它們似乎都需要一個完整的,完整形式的文檔來解析。我的XML對象可以放在一個由其他任何東西(包括其他完整對象)包圍的字符串中。

hw<e>[email protected][email protected]&nchrs%<?xml version="1.0"?><type><field>...</field>...</type>@ndH#r$omOre!!>nuT6erjc?y!<?xml version="1.0"?><type><field>...</field>...</type>ty!=] 

一個正則表達式將能夠同時排除隨機字符匹配的字符串,但找不到一個完整的XML對象。我想要一些方法來提取一個對象,用一個序列化器解析它,然後重複,直到該字符串不再包含有效的對象。

+3

必填DONT PARSE XML與REGEXs鏈接:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – luke 2010-05-27 20:00:14

+0

是的,我偶然發現了這一點。我正在尋找替代品,但我需要匹配,正則表達式是最好的解釋方式。 – dlras2 2010-05-27 20:42:22

回答

0

您可以使用正則表達式來搜索「<?xml」部分,然後假定這是XML對象的開始部分,然後使用XMLReader讀取/檢查字符串的其餘部分,直到您解析了一個完整的元素根級別(然後在根節點完全解析後停止使用XMLReader讀取流)?

編輯:有關使用XMLReader的更多信息,我建議的,我問了一個問題:I can never predict xmlreader behavior, any tips on understanding?

我最終的解決辦法是在解析XML時堅持使用「讀」的方法,並避免其他方法,實際上從流中讀取推進當前位置。

+0

這可能是要走的路......但我不完全確定如何使用XmlReader。我正在讀它,但你有沒有什麼有用的指針? – dlras2 2010-05-28 01:01:28

+0

是的,我在確定如何正確使用XMLReader時遇到了一些麻煩,所以我在這裏提出了一些問題,但現在我相當放心。我編輯了答案,添加了該問題的鏈接。 – BlueMonkMN 2010-05-28 13:46:25

0

您可以嘗試使用Html Agility Pack,它可以用來解析「格式不正確的XML」並使其可以通過DOM訪問。

您需要知道您正在尋找哪個元素(例如您的示例中的<type>),因爲它也會解析意外元素(例如您的示例中的<e>)。