2011-02-28 51 views
0

我是學生剛學XML和C#。我正在編寫一個程序,它將讀取xml數據,處理它,並將其寫回到xml。相當標準的東西。具體來說,該程序將允許用戶創建/生成角色,並按照我的朋友的要求爲L5R tapletop RPG遊戲添加新類型的信息(部落,技能,獎勵等)。這是一種學習體驗,當我完成後,會給我一些東西放進我的投資組合。的XML定製ID碼正確使用,進口,改寫在C#

我創建了XSD的和xml的第一,並會得到過去的僞相一旦這樣結束了。

在我的個XML,我做這樣的事情......

<clan clID="clanX"> 
    <clName>...</clname> 
    <bonus bnID="clXbonusX> 
    <bnName>...</bnName> 
    <modBy>someNum</modBy> 
    </bonus> 
</clan> 

因爲我還沒有這樣做的經驗,一旦我開始實際編程中,ID字符串要改變基礎上,去用戶輸入新的氏族和獎金名稱等。

現在我想一個循環做我排序/重命名。但是由於X的需要是可變字符,我將如何去確保只有X被改變,特別是從9增加到10,而不是下一個ASCII值?

我打算使用id來拉入一個新的氏族元素的開始,然後具體表示哪些獎勵(因爲獎金的數量可以變化)放入我將要創建的變量中持有他們和他們的價值。

基本上,該程序將檢查獎金的名稱,將其添加到1個陣列,並且在平行陣列增加它由X。

在此先感謝您的幫助!與實際數據ID

回答

0

實際信息(X)一旦我開始真正編程ID字符串會根據用戶輸入新的氏族和獎金的名稱更改保存這樣等等。可以改變

ID是不是真正的ID。從您的評論到Shekhar_Pro的回答,似乎您認爲ID需要在XML文檔的範圍內是唯一的。當且僅當您在DTD或模式中使用ID約束時,纔是如此。 ID約束並不是一個非常常見的用例,我不認爲這是一個例子。

更大的問題是:你真的需要在所有的ID?例如,假設氏族和特徵的名稱不會隨時間而改變 - 可能會添加新的,但AEG不會隨時更改舊的 - 如果您的文檔如下所示:

<clan name="Scorpion"> 
    <bonus trait="Honor" value="-1"/> 
    <bonus trait="Intelligence" value="+1"/> 
</clan> 

不僅是您的文檔更簡潔,你可以找到所有的bonus元素的Bayushi家庭用的XPath:

//clan[@name='Scorpion']/bonus 

在你的架構,您可以表明,氏族名需要獨特使用:

<xsd:element name="clan" type="clanType"> 
    <xsd:unique name="nameKey"> 
    <xsd:selector xpath="*/clan"/> 
    <xsd:field xpath="@name"/> 
    </xsd:unique> 
</xsd:element> 

您可能需要根據文檔中clan元素的存在位置在選擇器中使用XPath進行調整。

+0

不錯,這似乎更簡潔和高效(和你的L5R的知識給我留下深刻的印象^^) 我不知道xpath是什麼,但我有一種感覺,我即將開始學習大聲笑 另外,當涉及到* /和//蛤蜊[@ .... 是那個目錄符號?這是我一直想知道但不記得/不能真正找到一個列表如何編程路徑,而不使用整個c:\\ blahblah \ blah(我不記得正確的術語,所以谷歌搜索是一個婊子) – 2011-02-28 22:51:54

+0

我查了一些更多的信息,我不知道我會用xpath,因爲在我的程序中我將使用Linq到XML,所以我仍然會使用我的模式中的xpath條目? – 2011-02-28 23:14:40

+0

此外,你使用type =「clanType」,我不確定如何聲明類型(迄今爲止我的模式已經非常基本)我對上述有點困惑,不需要成爲一個複雜的類型,還是我會把這個/獨特? 我得到了正在發生的事情的要點,使用屬性而不是元素來表示值,但對於如何確保它們是唯一的作品,我仍然有點困惑。 – 2011-02-28 23:20:33

0

插入元素名稱似乎redundent ..你已經知道,在clID元素clanclan元素所以只是把你X,而不是整個clanXbnID元素也一樣。

,你甚至會從提取「ID」

+0

這是我的理解,我不能有ID是相同的,因爲如果ID「1」已經存在爲一個部族ID,然後在子元素中有一個獎勵ID爲「1」將導致搜索時發生衝突爲自定義ID的元素? – 2011-02-28 21:28:42