Pergunta

Eu tenho alguns dados XML contidos em três arquivos (database.xml, Participants.xml e ConditionTokens.xml). Eu estou tentando usar entidades externas para colocar os participantes e tokens condição para o arquivo de banco de dados, mas quando eu executar esse código ...

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

... não há participantes ou tokens condição no meu xml (a HasElements propriedade para "banco de dados" é falsa). Deve haver dois elementos filhos. Eu fico sem erros / avisos dentro do Visual Studio (2008), ea validação do esquema ao vivo parece ser feliz, mas algo não está certo quando eu executar o meu código.

Alguém poderia me dizer o que eu estou fazendo errado?

Eu ter colado os três arquivos XML abaixo.

Muito obrigado!

-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>
Foi útil?

Solução 2

Acabei usando <xs:redefine> vez.

Outras dicas

eu teria usado a classe XmlDocument para carregar os 3 documentos

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

Em seguida, usando o ImportNode e AppendNode anexar, em seguida, um para o outro ...

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

Isso deve praticamente fazê-lo (ou em vez de usar FirstChild usar um seletor XPath?)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top