Usuário com melhor resposta
Problema ao atualizar arquivo XML

Pergunta
-
Ola pessoal
Tenho a seguinte estrutura do xml:
<q>
<p>
<id>1</id>
<teath_id>1</teath_id>
<port_quest>texto ...</port_quest>
<port_a> texto </port_a>
<port_b>texto</port_b>
<port_c>texto</port_c>
<port_d>Texto ..e</port_d>
<port_e>texto </port_e>
<Respondido>0</Respondido>...
Tentei atualizar um campo do arquivo da seguinte maneira :
XDocument xDocument = XDocument.Load("App_Data/Quest.xml");
var items = from item in xDocument.Descendants("p")
where item.Element("id").Value == "'"+id+"'"
select item;
foreach (XElement itemElement in items)
{
itemElement.SetElementValue("Respondido", "1");
}O código não gera erro na hora da compilação, mas não atualiza o arquivo, alguem saberia me dizer o motivo?
Respostas
-
Oi Leandro,
O código entra no if certinho?
Segue um código que eu sei que esta funcionando..
string sOrderType = ""; XmlNodeList noE2EDP01008GRP; //itens produto noE2EDP01008GRP = xIdoc.SelectNodes("//ns0:Receive/ns0:idocData/ns1:E2EDP01008GRP", nsMgr); for (int i = 1; i < noE2EDP01008GRP.Count + 1; i++) { XmlNodeList noE2EDP01008; noE2EDP01008 = xIdoc.SelectNodes("//ns0:Receive/ns0:idocData/ns1:E2EDP01008GRP[" + i.ToString() + "]/ns1:E2EDP01008", nsMgr); if (noE2EDP01008[0].ChildNodes[3].InnerText != "9") //PSTYP se for 9 o produto é serviço sOrderType = "Order"; else { sOrderType = "SupplyOrServiceOrder"; break; } } xMsg.SelectSingleNode(sOrderTypeCoded).InnerText = sOrderType; //OrderTypeCoded
Na hora de setar usa o xDocument.SelectSingleNode(Expressao xpath).InnerText = "valor";Voce esta apontando para o xmlnode tem q apontar para o xmlDocument
Espero ter ajudado
Ruth Resende
MVP, MCTS - Biztalk Server
www.biztalkbrasil.com.br
Twitter: @ruthresende- Marcado como Resposta leandro Bertanha quinta-feira, 22 de dezembro de 2011 13:42
Todas as Respostas
-
Oi Leandro, tenta usar as classes XmlNode, e XmlNodeList
Aqui neste link vc vai encontrar um exemplo de como usar o XmlNode e XmlNodeList http://social.msdn.microsoft.com/Forums/pt-BR/xmlpt/thread/04fa393a-0a0a-4233-8f05-1d65273cb1a2
Para setar o valor precisa criar o XmlNode e usar a sintaxe: XmlNode.InnerText = "Valor";
Espero ter ajudado
Ruth Resende
MVP, MCTS - Biztalk Server
www.biztalkbrasil.com.br
Twitter: @ruthresende -
Remontei da seguinte maneira :
XmlDocument xDocument = new XmlDocument();
xDocument.Load("App_Data/Quest.xml");
XmlNodeList quest = xDocument.SelectNodes("/q/p");
//XmlNode root = xDocument.DocumentElement;
foreach (XmlNode q in quest)
{
if (q.SelectSingleNode("/q/p/id").InnerText == "'"+id+"'")
{
q["/q/p/Respondido"].InnerText = "1";
}
}
xDocument.Save("App_Data/Quest.xml"); -
Oi Leandro,
O código entra no if certinho?
Segue um código que eu sei que esta funcionando..
string sOrderType = ""; XmlNodeList noE2EDP01008GRP; //itens produto noE2EDP01008GRP = xIdoc.SelectNodes("//ns0:Receive/ns0:idocData/ns1:E2EDP01008GRP", nsMgr); for (int i = 1; i < noE2EDP01008GRP.Count + 1; i++) { XmlNodeList noE2EDP01008; noE2EDP01008 = xIdoc.SelectNodes("//ns0:Receive/ns0:idocData/ns1:E2EDP01008GRP[" + i.ToString() + "]/ns1:E2EDP01008", nsMgr); if (noE2EDP01008[0].ChildNodes[3].InnerText != "9") //PSTYP se for 9 o produto é serviço sOrderType = "Order"; else { sOrderType = "SupplyOrServiceOrder"; break; } } xMsg.SelectSingleNode(sOrderTypeCoded).InnerText = sOrderType; //OrderTypeCoded
Na hora de setar usa o xDocument.SelectSingleNode(Expressao xpath).InnerText = "valor";Voce esta apontando para o xmlnode tem q apontar para o xmlDocument
Espero ter ajudado
Ruth Resende
MVP, MCTS - Biztalk Server
www.biztalkbrasil.com.br
Twitter: @ruthresende- Marcado como Resposta leandro Bertanha quinta-feira, 22 de dezembro de 2011 13:42
-
Ola Ruth
Estou quase conseguindo, minha duvida agora esta no ajuste do xpath no campo:
xDocument.SelectSingleNode("xpath").InnerText = "1";
Como devo fazer o ajuste aqui?
XmlDocument xDocument = new XmlDocume
nt();
xDocument.Load("App_Data/Quest.xml");
string sOrderType = "";
XmlNodeList oq; //itens produto
oq = xDocument.SelectNodes("//q/p");
for (int i = 1; i < oq.Count + 1; i++)
{
XmlNodeList no;
no = xDocument.SelectNodes("//q/p[" + i.ToString() + "]");
if (no[0].ChildNodes[6].InnerText != "'"+id.ToString()+"'")
{
no[0].ChildNodes[8].InnerText = "1";
}
}// o erro esta aqui
//xDocument.SelectSingleNode("//q/p/Respondido").InnerText = "valor";
xDocument.Save("App_Data/Quest.xml");
- Editado leandro Bertanha quinta-feira, 22 de dezembro de 2011 01:00
-
http://support.microsoft.com/kb/311566
One word frees us of all the weight and pain of life: that word is love. -
Consegui pessoal, abrigado a todos
Código:
XmlDocument xDocument = new XmlDocument();
xDocument.Load("App_Data/Quest.xml");
string sOrderType = "";
XmlNodeList oq; //itens produto
oq = xDocument.SelectNodes("//q/p");
for (int i = 1; i < oq.Count + 1; i++)
{
XmlNodeList no;
no = xDocument.SelectNodes("//q/p[" + i.ToString() + "]");
if (int.Parse(no[0].ChildNodes[0].InnerText.ToString()) == id)
{
xDocument.SelectSingleNode("//q/p[" + i.ToString() + "]/Respondido").InnerText = "1";
}
}
xDocument.Save("App_Data/Quest.xml");