2009-06-26 52 views
0

我在三個文件(Database.xml,Participants.xml和ConditionTokens.xml)中包含一些xml數據。我試圖用外部實體的參與者和條件標記放到數據庫文件,但是當我運行此代碼...在Visual Studio 2008中使用外部實體合併XML文件

string xmlPath = Environment.CurrentDirectory + @"\Data\Database.xml"; 
XElement database = XElement.Load(xmlPath); 

...有我的XML沒有參與者或條件的令牌(在「數據庫」的HasElements屬性爲false)。應該有兩個子元素。我在Visual Studio(2008)中沒有得到任何錯誤/警告,並且實時模式驗證似乎很高興,但是當我運行我的代碼時,某些事情並不完全正確。

有人能告訴我我做錯了什麼嗎?

我粘貼了下面的三個xml文件。

非常感謝!

-Dan

Database.xml

<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE database [ 
    <!ENTITY conditionTokens SYSTEM "ConditionTokens.xml"> 
    <!ENTITY participants SYSTEM "Participants.xml">]> 
<database 
    xmlns="experimentManager" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="experimentManager Database.xsd"> 
    &conditionTokens; 
    &participants; 
</database> 

ConditionTokens.xml

<?xml version="1.0" encoding="utf-8" ?> 
<conditionTokens> 
    <conditionToken> 
    <id>1</id> 
    <token>LargeToSmall</token> 
    </conditionToken> 
    <conditionToken> 
    <id>2</id> 
    <token>SmallToLarge</token> 
    </conditionToken> 
</conditionTokens> 

Participants.xml

<?xml version="1.0" encoding="utf-8" ?> 
<participants> 
    <participant> 
    <id>1</id> 
    <conditionTokenId>1</conditionTokenId> 
    </participant> 
    <participant> 
    <id>2</id> 
    <conditionTokenId>2</conditionTokenId> 
    </participant> 
</participants> 
+0

是否有一個原因,你加載到XElement而不是XDocument?這會改變什麼嗎? – 2009-06-26 02:47:34

+0

我實際上首先嚐試了XDocument,但後來我想我會看到XElement是否工作得更好。不幸的是,它沒有區別:( -Dan – devuxer 2009-06-26 04:57:11

回答

0

我最終使用<xs:redefine>來代替。

0

我會使用XmlDocument類加載

XmlDocument xmlDatabase = new XmlDocument(); 
xmlDatabase.Load(databasePath); 
XmlDocument xmlTokens = new XmlDocument(); 
xmlTokens.Load(tokensPath); 
XmlDocument xmlParticipants = new XmlDocument(); 
xmlParticipants.Load(participantsPath); 

然後使用ImportNode和AppendNode然後附加到對方的3個文件...

xmlDatabase.FirstChild.AppendNode(xmlDatabase.ImportNode(xmlTokens.FirstChild), true); 
xmlDatabase.FirstChild.AppendNode(xmlDatabase.ImportNode(xmlParticipants.FirstChild), true); 

這應該差不多做它(或代替使用FirstChild使用xpath選擇器?)

+0

這是一個好主意,但一個缺點是,我會失去Visual Studio的實時驗證檢查。理想情況下,我想有單獨的文件,但他們驗證,如果他們是一個單一的文件,但如果我不能用它來處理!ENTITY語句,我會按照你的建議去處理。 Thanks! -Dan – devuxer 2009-06-26 04:53:28

相關問題