标签: xmldocument

将XmlDocument插入XmlDocument节点

我用一个节点创建了一个基本的XmlDocument:

XmlDocument bigDoc = new XmlDocument();
bigDoc.LoadXml("<Request></Request>");
Run Code Online (Sandbox Code Playgroud)

我正在获取另一个我想在<Request>节点内插入的XmlDocument .它对我不起作用:

 XmlNode requestNode =  bigDoc.FirstChild;
 requestNode.AppendChild(anotherXMLDocument);
Run Code Online (Sandbox Code Playgroud)

它引发了一个例外.

如何在另一个XmlDocument节点中插入XmlDocument?

.net c# xmldocument insert xmlnode

8
推荐指数
1
解决办法
7535
查看次数

循环遍历XML文档

我的XML文件结构如下所示:

<SalaryDetails>
    <Employee>
        <Name>George Dsouza</Name>
        <AnnualSalary>320000</AnnualSalary>
        <DaysWorked>22</DaysWorked>
    </Employee>
    <Employee>
        <Name>Jackie Parera</Name>
        <AnnualSalary>300000</AnnualSalary>
        <DaysWorked>19</DaysWorked>
    </Employee>
...
</SalaryDetails>
Run Code Online (Sandbox Code Playgroud)

我希望将所有数据作为员工记录放入数据库中XmlDocument.

所以我写了一个这样的循环:

XmlDocument xdcDocument = new XmlDocument();

xdcDocument.Load(@"D:\SalaryDetails.xml");

XmlElement xelRoot = xdcDocument.DocumentElement;
XmlNodeList xnlNodes = xelRoot.SelectNodes("/SalaryDetails/Employee");

foreach(XmlNode xndNode in xnlNodes)
    {
        //What to write here??
        //My sql insert command will go here
    }
Run Code Online (Sandbox Code Playgroud)

AnnualSalary并且DaysWorked是整数.

c# xml xmldocument

8
推荐指数
1
解决办法
3万
查看次数

将XmlDocument对象转换为XmlNode对象 - C#?

如何在C#中转换XmlDocument为a XmlNode?我需要将整个XmlDocument对象作为输入参数发送到.NET Web服务.

c# xmldocument xmlnode

7
推荐指数
1
解决办法
2万
查看次数

将XMLDocument写入具有特定换行符的文件(c#)

我有一个我从文件中读到的XMLDocument.该文件是Unicode,并且具有换行符'\n'.当我把XMLDocument写回来时,它有换行符'\ r \n'.

这是代码,非常简单:

XmlTextWriter writer = new XmlTextWriter(indexFile + ".tmp", System.Text.UnicodeEncoding.Unicode);
writer.Formatting = Formatting.Indented;

doc.WriteTo(writer);
writer.Close();
Run Code Online (Sandbox Code Playgroud)

XmlWriterSettings有一个属性NewLineChars,但是我无法在'writer'上指定settings参数,它是只读的.

我可以使用指定的XmlWriterSettings属性创建XmlWriter,但XmlWriter没有格式化属性,导致文件根本没有换行符.

所以,简而言之,我需要编写一个带有换行符'\n'和Formatting.Indented的Unicode Xml文件.思考?

c# xmldocument xmlwriter newline

7
推荐指数
2
解决办法
1万
查看次数

获取所有子元素节点名称和值的XElement

我正在考虑这样的方法.如果这实际上可以这样工作,请告诉我:对于示例XML:

<Root>
  <Node>
    <SubEl1>abc</SubEl1>
    <SubEl2>def</SubEl2>
    <SubEl3>123</SubEl3>
    <SubEl4>456</SubEl4>      
  </Node>
</Root>
Run Code Online (Sandbox Code Playgroud)

想要进入<Node>,循环检查节点/元素名称并获取它的值.像这样的东西,比如名字'SubEl1'对task1使用'abc',看到元素名称是'SubEl2'我做task2.必须检查所有子元素!

示例(不工作代码):

 //looping through 'Node' children
        switch(SubElName for 'Node element) 
        {
          case : 'SubEl1' 
            //Do Task1 using the SubEl1's value/TextName ...
          case: 'SubEl2' 
           //Task2 ...
          ... 
          case: default //Do default task.....
        } 
    //end loop
Run Code Online (Sandbox Code Playgroud)

如果你能想到任何其他方法(XElement,XmlDocument,SelectNodes()等,那也将受到赞赏!

c# xelement xmldocument selectnodes

7
推荐指数
1
解决办法
2万
查看次数

如何使XMLDocument不在自闭标签上放置空格?

我有一个格式良好的XML,没有任何空格.它必须是那样的.

当我将它加载到XMLDocument进行签名时,自闭标签会获得额外的空白区域

    <cEAN/>
Run Code Online (Sandbox Code Playgroud)

变为:

     <cEAN />
Run Code Online (Sandbox Code Playgroud)

一旦签署此文档,就无法删除空白区域.

PreserveWhiteSpace属性对结果没有任何影响.

我该如何改变这种行为?

c# xmldocument signedxml c#-4.0

7
推荐指数
1
解决办法
2314
查看次数

使用选定的Xpath和for循环删除XML

我目前有以下代码:

XPathNodeIterator theNodes = theNav.Select(theXPath.ToString());

while (theNodes.MoveNext())
{
    //some attempts i though were close
    //theNodes.RemoveChild(theNodes.Current.OuterXml);
    //theNodes.Current.DeleteSelf();
}
Run Code Online (Sandbox Code Playgroud)

我已将xpath设置为我想要在xml中返回的内容,并且我想删除循环的所有内容.我尝试了几种删除信息的方法,但它不喜欢我的语法.我在Microsoft支持上找到了一个示例:http://support.microsoft.com/kb/317666但我想使用它而不是每个.

任何意见或问题都表示赞赏.

.net c# xml xpath xmldocument

7
推荐指数
2
解决办法
6449
查看次数

从另一个文档创建xmlDocument

我正在尝试xmldocument通过不同的XML 创建对象

看下面的代码:

objNewsDoc.LoadXml(strNewsDetail);       // Current XML
XmlDocument docRss = new XmlDocument();  // new Xml Object i Want to create 

XmlElement news = docRss.CreateElement("news");   // creating the wrapper news node
news.AppendChild(objNewsDoc.SelectSingleNode("newsItem")); // adding the news item from old doc
Run Code Online (Sandbox Code Playgroud)

错误:要插入的节点来自不同的文档上下文

编辑1完成代码块:

try
{
       XmlDocument objNewsDoc = new XmlDocument();
        string strNewsXml = getNewsXml();
        objNewsDoc.LoadXml(strNewsXml);

        var nodeNewsList = objNewsDoc.SelectNodes("news/newsListItem");
        XmlElement news = docRss.CreateElement("news");
         foreach (XmlNode objNewsNode in nodeNewsList)
         {
               string newshref = objNewsNode.Attributes["href"].Value;
                string strNewsDetail = getNewsDetailXml(newshref);
                 try
                  { …
Run Code Online (Sandbox Code Playgroud)

c# xml xmldocument

7
推荐指数
1
解决办法
2万
查看次数

如何将内部文本插入空xml元素?

我有一个xmldocument,我正在加载xml.

xml看起来像这样:

<Table1>
  <buyer_id>0</buyer_id>
  <buyername>CompanyA</buyername>
  <address1>123 Simpsons Dr.</address1>
  <address2/>
  <city>Springfield</city>
  <state>ST</state>
  <postalcode>12345</postalcode>
  <eaddress/>
  <phone/>
  <fax/>
</Table1>
Run Code Online (Sandbox Code Playgroud)

我正在循环查看每个CompanyA条目并相应地设置innertext.我正在使用以下代码将内部文本插入符合条件的元素:

XmlDocument dom = new XmlDocument();
dom.LoadXml(xmlString);

XmlNodeList elemList = dom.GetElementByTagName("Table1");
for(int i = 0; i < elemList.Count; i++)
{
   if(dom.GetElementsByTagName("buyername").Item(i).InnerText.Contains("CompanyA")
   {
      dom.GetElementsByTagName("address1").Item(i).InnerText = "SomeInfo";
   }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,address1(123 Simpsons Dr.)的值将被"SomeInfo"替换.我想将"SomeInfo"插入到address2元素中,但是当我尝试使用时:

dom.GetElementsByTagName("address2").Item(i).InnerText = "SomeInfo";
Run Code Online (Sandbox Code Playgroud)

我收到一个错误.我能够将innertext插入到已经有值的任何元素中,但是当元素为空时(例如<address2/>)我不能.思考?

c# xml asp.net xmldocument

7
推荐指数
1
解决办法
3492
查看次数

如何获取XML模式验证失败位置的XPath(或节点)?

我使用XDocument.Validate(它似乎功能一样XmlDocument.Validate)来验证XML文档针对XSD -这工作得很好,我被告知验证错误.

但是,在ValidationEventHandler(和XmlSchemaException)中,只有一些信息似乎[可靠]公开,例如:

  • 错误消息(即"'X'属性无效 - 值'Y'根据其数据类型'Z'无效 - 模式约束失败"),
  • 严重程度

什么我想是获得了"失败的XPath"为验证失败(如果它是有道理的):那就是,我想获得相对于XML文档失败(而不是XML文本).

有没有办法从中获取"失败的XPath"信息XDocument.Validate?如果没有,可以通过另一种XML验证方法(如XmlValidatingReader1)获取"失败的XPath" 吗?


背景:

XML将作为数据发送到我的Web服务,并通过JSON自动转换(通过JSON.NET)到XML.因此,我开始处理XDocument数据1而不是文本,由于原始JSON数据,它没有保证顺序.REST客户端由于我不打算进入,基本上是XML表单上的HTML表单字段的包装器,服务器上的验证分为两部分 - XML模式验证和业务规则验证.

在业务规则验证中,很容易为不符合一致性的字段返回"XPath",这些字段可用于指示客户端上的失败字段.我想将此扩展到XSD模式验证,它验证基本结构验证,更重要的是,属性的​​基本"数据类型"和"存在".但是,由于所需的自动过程(即突出显示相应的失败字段)和源转换,原始文本消息和源行/列编号本身并不是非常有用.


以下是验证码的片段:

// Start with an XDocument object - created from JSON.NET conversion
XDocument doc = GetDocumentFromWebServiceRequest();

// Load XSD    
var reader = new StringReader(EmbeddedResourceAccess.ReadResource(xsdName));
var xsd = XmlReader.Create(reader, new XmlReaderSettings());
var schemas = new XmlSchemaSet();
schemas.Add("", xsd);

// Validate
doc.Validate(schemas, (sender, args) => {
  // Process validation (not parsing!) …
Run Code Online (Sandbox Code Playgroud)

.net c# xmldocument linq-to-xml xml-validation

7
推荐指数
1
解决办法
4440
查看次数