2013-04-04 33 views
1

這是我工作的噩夢:我們有一堆的HTML網頁,但其中包含其他XML元素的文件(所有前綴我們公司的名稱「TLA」)提供數據和結構,我現在正在重寫一個較舊的程序。更簡單的方法來提取混合XML只有前綴的元素/ HTML

實施例形式:

<html > 
<head> 
    <title>Highly Simplified Example Form</title> 
</head> 
<body> 
    <TLA:document> 
     <TLA:contexts> 
      <TLA:context id="id_1" value=""></TLA:context> 
     </TLA:contexts> 
     <TLA:page> 
      <TLA:question id="q_id_1"> 
       <table> 
        <tr> 
         <td> 
          <input id="input_id_1" type="text" /> 
         </td> 
        </tr> 
       </table> 
      </TLA:question> 
     </TLA:page> 
     <!-- Repeat many times --> 
    </TLA:document> 
</body> 
</html> 

我的任務是寫一個預處理器,將這樣一個文件分割成兩個文件:僅含有「TLA」元素的XML文件,並僅含有一個html文件html元素。

示例XML:

<?xml version="1.0" encoding="utf-8" ?> 
<TLA:document> 
    <TLA:contexts> 
     <TLA:context id="id_1" value=""></TLA:context> 
    </TLA:contexts> 
    <TLA:page> 
     <TLA:question id="q_id_1"> 
     </TLA:question> 
    </TLA:page> 
    <!-- Repeat many times --> 
</TLA:document> 

示例HTML:

<html > 
<head> 
    <title>Highly Simplified Example Form</title> 
</head> 
<body> 
    <table> 
     <tr> 
      <td> 
       <input id="input_id_1" type="text" /> 
      </td> 
     </tr> 
    </table> 
    <!-- Repeat many times --> 
</body> 
</html> 

現在我可以在同一時間處理每一個元素,並將其複製到新的文件,這樣做,但我認爲我有可能是通過使用一次或兩次轉換或一些聰明的序列化來實現這一點的更簡單的方法,但我不知道要探索哪條途徑。

那麼有沒有人有建議如何處理?理想情況下,VB.net,但C#或其他東西也是可以接受的。

更新:

看來,XSLT是做到這一點的方式,但我知道的太少了吧,我還需要一些幫助。看起來// namespace :: TLA可能是提取數據元素的正確xpath,但我不知道如何實現它。

+1

應在XSLT很容易,尤其是在XSLT 2.0。但是我需要更好地理解你想要的輸出:你能從這個源顯示你想要的兩個文件嗎? (特別是當TLA:頁面重複時) – 2013-04-04 09:59:14

+0

@MichaelKay感謝您的建議,我也添加了示例輸出。 XSLT對我來說是一個新的領域,所以我不確定它能做什麼。 – 2013-04-04 10:06:02

+3

我同意XSLT將是最好的選擇,但只有在完整的輸入文件是格式良好的XML的情況下。有時,HTML格式良好 - XML,但不一定非要,通常情況下不是。如果不是,則可能需要手動解析文件以查找特定的開始和結束標記,或者如果這是可變的事情,則可能需要查看諸如HTML Agility Pack之類的東西。 – 2013-04-04 12:15:53

回答

相關問題