Слияние файлов XML с использованием внешних объектов в Visual Studio 2008 - PullRequest
0 голосов
/ 26 июня 2009

У меня есть некоторые данные xml, содержащиеся в трех файлах (Database.xml, Участники.xml и ConditionTokens.xml). Я пытаюсь использовать внешние объекты для помещения токенов участников и условий в файл базы данных, но когда я запускаю этот код ...

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

... в моем xml нет никаких токенов участников или условий (свойство HasElements для "database" имеет значение false). Там должно быть два дочерних элемента. Я не получаю ошибок / предупреждений в Visual Studio (2008), и проверка работоспособности схемы кажется удачной, но что-то не так, когда я запускаю свой код.

Может кто-нибудь сказать мне, что я делаю не так?

Я вставил три файла XML ниже.

Большое спасибо!

1012 * Дан *

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>

Ответы [ 2 ]

0 голосов
/ 27 августа 2009

В итоге я использовал <xs:redefine>.

0 голосов
/ 26 июня 2009

Я бы использовал класс XmlDocument для загрузки 3 документов

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

Затем с помощью присоединения ImportNode и AppendNode, затем друг к другу ...

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

Это должно в значительной степени сделать это (или вместо использования FirstChild использовать селектор xpath?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...