2009-06-26 7 views
0

xmlデータは、3つのファイル(Database.xml、Participants.xml、およびConditionTokens.xml)に含まれています。 (私のXMLには、参加者や条件トークンが存在しない...私は、データベースファイルに参加し、条件トークンを配置するために外部エンティティを使用しようとしていますが、私はこのコードを実行すると...Visual Studio 2008で外部エンティティを使用してXMLファイルをマージする

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

"database"のHasElementsプロパティはfalseです)。 2つの子要素が必要です。私はVisual Studio(2008)内でエラー/警告を受け取りません。ライブスキーマの検証はうまくいくようですが、コードを実行するときに何か問題があります。

私が間違っていることを教えてもらえますか?

以下の3つの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> 
私は
XmlDocument xmlDatabase = new XmlDocument(); 
xmlDatabase.Load(databasePath); 
XmlDocument xmlTokens = new XmlDocument(); 
xmlTokens.Load(tokensPath); 
XmlDocument xmlParticipants = new XmlDocument(); 
xmlParticipants.Load(participantsPath); 

はその後にimportNodeを使用してAppendNodeがお互いに続い添付する3つの文書をロードするためにXmlDocumentクラスを使用しているだろう
+0

XDocumentではなくXElementに読み込む理由はありますか?それは何か変わるのだろうか? –

+0

私は実際にXDocumentを最初に試しましたが、XElementがもっとうまくいくかどうかは分かりました。残念ながら、それは違いはありませんでした:( -Dan – devuxer

答えて

0

代わりに<xs:redefine>を使用しました。

+0

Dan、私は同じ問題がありますか? xs:redefineタグを使用してXMLファイルの詳細を共有しますか? – SuneelK

+0

@suneelk、これらは簡単には掘り出すことができませんが、http://www.w3schools.com/schema/el_redefine.aspをチェックアウトしましたか?質問、私は助けることができるかもしれません。 – devuxer

0

...

ほとんどが何をすべき
xmlDatabase.FirstChild.AppendNode(xmlDatabase.ImportNode(xmlTokens.FirstChild), true); 
xmlDatabase.FirstChild.AppendNode(xmlDatabase.ImportNode(xmlParticipants.FirstChild), true); 

それとも(FirstChildの代わりにxpathセレクタを使用するのですか?)

+0

これは良いアイデアですが、1つの欠点は、私はVisual Studioのライブ検証チェックを失うことです。理想的には、別々のファイルを持っていますが、単一のファイルだったのですが、!ENTITYステートメントで動作させることができない場合でも、私はあなたの提案と一緒に行きます。 ありがとう! -Dan – devuxer

関連する問題