2008-12-11 130 views
1

背景:
我有一箇舊的Web內容管理系統存儲的內容在XML文件中,每頁一個XML文件。我正在將該CMS的內容導入到新的內容中,並且我知道我將需要按摩現有的XML以使導入過程正常工作。如何根據其他節點的值動態添加新的XML節點?

現有XML:

<page> 
    <audience1>true</audience> 
    <audience2>false</audience> 
    <audience3>true</audience> 
    <audience4>false</audience> 
    <audience5>true</audience> 
</page> 

希望的XML:

<page> 
    <audience1>true</audience> 
    <audience2>false</audience> 
    <audience3>true</audience> 
    <audience4>false</audience> 
    <audience5>true</audience> 
    <audiences>1,3,5</audiences> 
</page> 

問題:
所需XML添加節點,用逗號分隔的具有一個其它節點的列表「真實」的價值。我需要爲多個文件實現所需的XML,那麼完成此操作的最佳方法是什麼?我的一些想法:

  • 使用帶正則表達式查找/替換的文本編輯器。但是什麼表達?我甚至不知道從哪裏開始。
  • 使用像ASP.NET這樣的編程語言來解析文件並附加所需的節點。再次,不知道從哪裏開始,因爲我的.NET技能只是平均水平。

建議?

+0

XSLT是一般的解決方案,XPathDocument中操縱特定的解決方案,regexs不是溶液在所有。 – annakata 2008-12-12 13:14:49

回答

1

我可能會使用XmlDocument類.NET中,但是這只是我,因爲我從來沒有去過那個喜歡regexs的。

然後,您可以使用XPath表達式來拉出每個頁面節點的子節點,對它們進行評估並在子頁面末尾附加一個新節點,並在完成後保存XmlDocument。

XSL是一個選項太多,但最初的學習曲線是有點痛苦。

有可能與正則表達式更優雅的方式,但如果你只運行一次,它唯一要緊的是它的工作原理。

1

我可能會使用XSLT樣式表來解決這個問題。我構建了以下樣式表,使其具有一般的正確性,但它可以很容易地進行修改,從而爲您提供確實的輸出結果,如果您確實需要確切的輸出結果。

<?xml version="1.0" encoding="utf-8"?> 

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <xsl:apply-templates select="/*"/> 
</xsl:template> 

    <xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:copy-of select="*"/> 

     <xsl:element name="nodes"> 
      <xsl:apply-templates select="*[normalize-space(.) = 'true']"/> 
     </xsl:element> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/*/*"> 
    <xsl:value-of select="concat(',', local-name())"/> 
    </xsl:template> 

    <xsl:template match="/*/*[1]"> 
    <xsl:value-of select="local-name()"/> 
    </xsl:template> 

</xsl:stylesheet> 

這XSLT的輸出將是:

<page> 
    <audience1> 
    true 
    </audience1> 
    <audience2> 
    false 
    </audience2> 
    <audience3> 
    true 
    </audience3> 
    <audience4> 
    false 
    </audience4> 
    <audience5> 
    true 
    </audience5> 
    <nodes>audience1,audience3,audience5</nodes> 
</page> 

XSLT將是一個不錯的選擇對於這一點,因爲你可以從幾乎任何你想要的編程語言中使用,或者您可以使用Visual Studio應用的模板。在那裏也有很多free tools,你可以用它來應用轉換。

相關問題