2012-09-11 42 views
0

首先,我不是程序員。基於字長的插入

我有如此描述方面具有巨大的XML文件:

<term> 
<termId>MANUAL000399</termId> 
<termUpdate>Add</termUpdate> 
<termName>care</termName> 
<termType>Pt</termType> 
<termStatus>Active</termStatus> 
<termApproval>Approved</termApproval> 
<termCreatedDate>20120618T14:38:20</termCreatedDate> 
<termCreatedBy>admin</termCreatedBy> 
<termModifiedDate>20120618T14:40:41</termModifiedDate> 
<termModifiedBy>admin</termModifiedBy> 
</term> 

在該文件中,術語要麼

<termType> 

Pt或ND

我想解決申請二者皆是。 什麼,我想要做的是能穿過去,看看字長 termName ,如果裏面還有超過5個字符,添加另一個屬性,一個

<termNote> 

<termModifiedBy> 

屬性:

<term> 
<termId>MANUAL000399</termId> 
<termUpdate>Add</termUpdate> 
<termName>care</termName> 
<termType>Pt</termType> 
<termStatus>Active</termStatus> 
<termApproval>Approved</termApproval> 
<termCreatedDate>20120618T14:38:20</termCreatedDate> 
<termCreatedBy>admin</termCreatedBy> 
<termModifiedDate>20120618T14:40:41</termModifiedDate> 
<termModifiedBy>admin</termModifiedBy> 
<termNote label="Short">Short</termNote> 
</term> 

誰能指教一下這樣做的最好的方法?我在這裏發現了正則表達式,但問題在於它們的應用,我發現有人建議/ \ b [a-zA-Z] {5,} \ b /但我不知道如何編寫一個腳本,然後插入術語筆記,如果它匹配。

+0

很難不提供到這裏的鏈接:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

什麼應該我使用而不是正則表達式?正如我所說我不是程序員,也不知道這些事情。謝謝 – lobe

+0

我很抱歉,我不會回答你的問題。但我可以提出一些意見。首先,如果作爲一個非程序員,你只需要做你在這裏展示的東西,那麼你就需要成爲一名程序員。選擇Python或Ruby並學習它。其次,你的問題並不清楚。你需要改進你的文本構成,我確信那裏的XML人會回答。第三,不要用regexen解析XML,除非你有一組特定的,已知的文檔,這些文檔碰巧能夠被正則表達式解析。正則表達式不是金錘子。 –

回答

0

這個轉換可以通過一個簡單的XSLT樣式表完成。 (XSLT是一種非程序員經常比程序員更積極的語言,樣式表基本上是一套轉換規則:當你看到與X匹配的東西時,將其替換爲Y.當然,一旦掌握了XSLT,你就可以可以稱自己是程序員)。

一是一些樣板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:strip-space elements="*"/> <!-- removes whitespace from the input --> 
<xsl:output indent="yes"/>  <!-- adds whitespace to the output --> 

然後默認模板規則,副本的東西不變,如果沒有更具體的規則:

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

然後模板規則匹配簡要條件:

<xsl:template match="term[string-length(termName) &lt; 5]"> 
    <term> 
    <xsl:copy-of select="*"/> 
    <termNote label="Short">Short</termNote> 
    </term> 
</xsl:template> 

然後結束:

</xsl:stylesheet> 

你應該能夠與任何XSLT處理器上運行,這一點;有很多可用的。如果沒有別的想法,請下載我的撒克遜處理器周圍非常簡單的GUI界面的KernowForSaxon(來自SourceForge)。

+0

哇,這太棒了,這是完全正確的!我無法告訴你我多麼感激,非常感謝你。 – lobe