2013-04-04 30 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

回答

相关问题