Problemas com ClientOM.File.OpenBinaryDirect "cortando" xml, e agora?
-
quarta-feira, 18 de julho de 2012 16:59
Olá,
Tenho uma aplicação console que acessa os itens da minha biblioteca infopath.A aplicação le os itens da biblioteca e os atualiza.
Para atualizar o arquivo infopath (xml) o sistema precisa pegá-lo/obtê-lo (xml).
Para isso ele faz:FileInformation ofile = ClientOM.File.OpenBinaryDirect(ClientContext, (string)oitem["FileRef"]);
System.Xml.XmlTextReader oXmlTxtReader = new XmlTextReader(ofile.Stream);
System.Xml.Serialization.XmlSerializer oSerializer = new System.Xml.Serialization.XmlSerializer(typeof(XmlDocument));
XmlDocument Form = (XmlDocument)oSerializer.Deserialize(oXmlTxtReader);
Quando abro o arquivo infopath Form(XMLDOcument) vejo que as primeiras linhas do mesmo não existem.
Alguém conhece uma outra forma para obter o xml?Obrigado
k2rto4-Pb - Analista SharePoint
- Editado k2rto'4 terça-feira, 24 de julho de 2012 12:07
Todas as Respostas
-
quarta-feira, 18 de julho de 2012 18:18
k2rto4-Pb,
Por que você não publica os campos necessários do infopath na biblioteca? Assim seria mais facil a atualização.
Atenciosamente, Rafael Fausto
-
quarta-feira, 18 de julho de 2012 18:42
Tente o seguinte:
string output = string.Empty; FileInformation ofile = ClientOM.File.OpenBinaryDirect(ClientContext, (string)oitem["FileRef"]); XmlTextReader reader = new XmlTextReader(ofile.Stream); reader.WhitespaceHandling = WhitespaceHandling.None; string node = string.Empty; while(reader.Read()) { if(!string.IsNullOrEmpty(reader.Value)) { switch(node) { case "my:txtNome": case "my:txtEndereco": output = string.Concat(output, node.Length > 3 ? node.Substring(3) : node, "=", reader.Value, ",\n"); break; } } node = reader.Name; }Ou você pode utilizar um XPath se o seu Xml for muito complexo.
ROBERTOSLJUNIOR
- Editado Roberto da Silva JuniorMicrosoft Community Contributor quarta-feira, 18 de julho de 2012 18:44 Mais sugestões
-
quarta-feira, 18 de julho de 2012 19:15
Olá Roberto,
Fiz aqui o que voce me passou mas nao deu certo.
As linhas iniciais ainda não existem no documento.
É como que se o ClientOM.File.OpenBinaryDirect(ClientContext, (string)oitem["FileRef"]) não trouxesse elas.
E agora?
Obrigado
- Editado k2rto'4 quarta-feira, 18 de julho de 2012 19:32
-
quarta-feira, 18 de julho de 2012 19:52
Oi, tente o seguinte:
XmlDocument doc = new XmlDocument(); doc.Load(reader); reader.Close(); stream.Close(); XmlNameSpaceManager ns = new XmlNameSpaceManager(doc.NameTable); ns.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-06-11T12:44:57"); doc.DocumentElement.SelectSingleNode("my:txtNome", ns).InnerText = "Roberto"; System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); SPFile oSPFile = oWeb.Folders["BIBLIOTECA"].Files.Add(item.File.Name.ToString(), (encoding.GetBytes(doc.OuterXml)), true); item.File.Update();
Se possível utilize XmlReader, eu estava vendo a documentação e XmlTextReader não é mais utilizado.
Abraço
ROBERTOSLJUNIOR
-
quarta-feira, 18 de julho de 2012 20:16
Olá Roberto,
O reader ja esta errado.
No seu exemplo anterior:
FileInformation ofile = ClientOM.File.OpenBinaryDirect(ClientContext, (string)oitem["FileRef"]);
XmlTextReader reader = new XmlTextReader(ofile.Stream);
reader.WhitespaceHandling = WhitespaceHandling.None;
Ele já esta incompleto.Seria isso mesmo?
Abraços
k2rto4-Pb - Analista SharePoint
-
quarta-feira, 18 de julho de 2012 20:33
Tente
string fileurl = (string)item["FileRef"];
E veja se retorna algo.
- Editado Roberto da Silva JuniorMicrosoft Community Contributor quarta-feira, 18 de julho de 2012 20:35
- Editado Roberto da Silva JuniorMicrosoft Community Contributor quarta-feira, 18 de julho de 2012 20:35
-
quarta-feira, 18 de julho de 2012 20:38
Olá,
Desta forma em vez de ser retornado o "/meusubsite/minhabiblioteca/052145-2010.xml" é retornado apenas 052145-2010.xml.
E assim o seguinte erro é mostrado:Specified argument was out of the range of valid values.
Parameter name: serverRelativeUrlObrigado
k2rto4-Pb - Analista SharePoint
-
quarta-feira, 18 de julho de 2012 20:41
Mudei a resposta.
Veja
ROBERTOSLJUNIOR
-
quarta-feira, 18 de julho de 2012 20:47
Olá,
O retorno de string fileurl = (string)item["FileRef"] é "/meusubsite/minhabiblioteca/052145-2010.xml.
Abs
k2rto4-Pb - Analista SharePoint
-
quarta-feira, 18 de julho de 2012 20:55
Você já tentou com outro xml?
Pode passar o xml?
ROBERTOSLJUNIOR
-
quarta-feira, 18 de julho de 2012 21:09
Olá Roberto,
Ja tentei com vários.Acabei de fazer um teste aqui com um xml completo.
Depois que o mesmo passa pela rotina abaixo ele perde as 4 primeiras linhas do xml.FileInformation ofile = ClientOM.File.OpenBinaryDirect(ClientContext, (string)oitem["FileRef"]);
System.Xml.XmlTextReader oXmlTxtReader = new XmlTextReader(ofile.Stream);
System.Xml.Serialization.XmlSerializer oSerializer = new System.Xml.Serialization.XmlSerializer(typeof(XmlDocument));
XmlDocument Form = (XmlDocument)oSerializer.Deserialize(oXmlTxtReader);
Absk2rto4-Pb - Analista SharePoint
-
quarta-feira, 18 de julho de 2012 22:07
Olá Roberto,
Consegui resolver aqui de uma forma, mas talvez existam outras.
Segue solução:O que fiz foi:
Criar um novo XMLDocument.
Neste novo XML Document eu adicionei os ChildNodes que faltavaEntão lí e copiei o childNode do arquivo Original para um novo XmlNode.
Por fim adicionei o XmlNode copiado ao novo XMLDocument gerado.
Com isso tenho o meu XMLDocument completo da forma como deveria ser.Em breve posto solução.
Att,
Muito Obrigado.
Conseguimos!!!!!!!Abs
k2rto4-Pb - Analista SharePoint
- Marcado como Resposta k2rto'4 segunda-feira, 23 de julho de 2012 18:29
-
segunda-feira, 23 de julho de 2012 18:28
Olá Rafael e Roberto,
Consegui obter o xml original do item.
Consegui por acaso lendo este outro post.
Aqui o Rafael Fausto passou um link onde eu consegui obter a resposta.
Agora consigo pegar o xml direto.
Para isso basta:
....Dentro do Foreach.....
FileInformation ofile = ClientOM.File.OpenBinaryDirect(ClientContext, (string)oitem["FileRef"]);
XmlDocument XmlOriginalInfoPath = new XmlDocument();
XmlOriginalInfoPath.Load(ofile.Stream);Abraços
k2rto4-Pb - Analista SharePoint
- Marcado como Resposta k2rto'4 segunda-feira, 23 de julho de 2012 18:28

