标签: xmldocument

性能:XDocument与XmlDocument

现在,我意识到此前提出过这类问题(特别是这个 - 我认为这是对两个对象的非常好的描述).我的问题更多是围绕表现.我有几个XML文档,大小超过100 - 300 K. 我注意到将这些信息加载到一个XDocument而不是一个XmlDocument对象时会有一些延迟.这两个对象之间是否存在严重的性能差异?他们是否以不同方式访问XML的内容?使用XML字符串时,这是首选的,或者是有区别的.这些对象的最终用途是XPath在有问题的对象上运行查询(或LINQ,取决于).

同样,这主要是性能问题,涉及内存和速度.

.net xml performance xmldocument linq-to-xml

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

Foreach循环XmlNodeList

目前我有以下代码:

XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");
foreach (int i in tweets)
{
    if (tweets[i].InnerText.Length > 0)
    {
         MessageBox.Show(tweets[i].InnerText);
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,它给了我System.InvalidCastExceptionforeach线.

以下代码完美地工作(没有foreach,i被替换为零):

XmlDocument xDoc = new XmlDocument();
xDoc.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=twitter");

XmlNodeList tweets = xDoc.GetElementsByTagName("text");

if (tweets[0].InnerText.Length > 0)
{
     MessageBox.Show(tweets[0].InnerText);
}
Run Code Online (Sandbox Code Playgroud)

c# foreach xmldocument

17
推荐指数
3
解决办法
6万
查看次数

使用XPath解析XML文档

可以说我有以下xml(一个简单的例子)

<rows>
   <row>
      <name>one</name>
   </row>
   <row>
      <name>two</name>
   </row>
</rows>
Run Code Online (Sandbox Code Playgroud)

我试图通过使用XmlDocument和XPath解析这个(最终我可以创建行列表).

例如...

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

foreach(XmlNode row in doc.SelectNodes("//row"))
{
   string rowName = row.SelectSingleNode("//name").InnerText;
}
Run Code Online (Sandbox Code Playgroud)

为什么,在我的foreach循环中,rowName总是"一个"?我希望它在第一次迭代时是"一个",在第二次迭代时是"两个".

似乎// name获取文档中的第一个实例,而不是我期望的行中的第一个实例.毕竟,我在"行"节点上调用该方法.如果这是"它是如何工作的"那么任何人都可以解释我如何改变它以满足我的需求?

谢谢

c# xpath xmldocument

15
推荐指数
2
解决办法
4万
查看次数

无法获取XmlDocument.SelectNodes来检索我的任何节点?

我正在尝试解析XML文档.有问题的文档是AppxManifest文件.

示例文档如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:build="http://schemas.microsoft.com/developer/appx/2012/build" IgnorableNamespaces="build">
  <Identity Name="uytury" Publisher="hygj" Version="1.0.0.12" ProcessorArchitecture="neutral" />
  <Properties>
    <DisplayName>jhjj</DisplayName>
    <PublisherDisplayName>bhhjb</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
  </Properties>
  <Prerequisites>
    <OSMinVersion>6.2.1</OSMinVersion>
    <OSMaxVersionTested>6.2.1</OSMaxVersionTested>
  </Prerequisites>
  <Resources>
    <Resource Language="EN" />
  </Resources>
  <Applications>
    <Application Id="App" Executable="gfg.exe" EntryPoint="gfg.App">
      <VisualElements DisplayName="fdsf" Logo="Assets\Logo.png" SmallLogo="Assets\SmallLogo.png" Description="gfdsg" ForegroundText="light" BackgroundColor="#2672EC">
        <DefaultTile ShowName="allLogos" WideLogo="Assets\WideLogo.png" ShortName="gfdsg" />
        <SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="#2672EC" />
        <InitialRotationPreference>
          <Rotation Preference="portrait" />
          <Rotation Preference="landscape" />
          <Rotation Preference="portraitFlipped" />
          <Rotation Preference="landscapeFlipped" />
        </InitialRotationPreference>
      </VisualElements>
      <Extensions>
        <Extension Category="windows.search" />
        <Extension Category="windows.shareTarget">
          <ShareTarget>
            <DataFormat>Text</DataFormat>
          </ShareTarget>
        </Extension>
      </Extensions>
    </Application>
  </Applications>
  <build:Metadata>
    <build:Item …
Run Code Online (Sandbox Code Playgroud)

.net c# xml xpath xmldocument

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

将对象序列化为XmlDocument

为了返回SoapException.Detailasmx Web服务的有用信息,我从WCF中获取了一个想法,并创建了一个包含所述有用信息的错误类.然后将该故障对象序列化为XmlNode抛出所需的对象SoapException.

我想知道我是否有最好的代码来创建XmlDocument- 这是我对它的看法:

var xmlDocument = new XmlDocument();
var serializer = new XmlSerializer(typeof(T));
using (var stream = new MemoryStream())
{
    serializer.Serialize(stream, theObjectContainingUsefulInformation);
    stream.Flush();
    stream.Seek(0, SeekOrigin.Begin);

    xmlDocument.Load(stream);
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

更新:我实际上最终执行了以下操作,因为除非您将XML包装在<detail>xml元素中,否则您将SoapHeaderException在客户端获得:

var serialiseToDocument = new XmlDocument();
var serializer = new XmlSerializer(typeof(T));
using (var stream = new MemoryStream())
{
    serializer.Serialize(stream, e.ExceptionContext);
    stream.Flush();
    stream.Seek(0, SeekOrigin.Begin);

    serialiseToDocument.Load(stream);
}

// Remove the xml declaration
serialiseToDocument.RemoveChild(serialiseToDocument.FirstChild);

// Memorise the node we want
var …
Run Code Online (Sandbox Code Playgroud)

c# xmldocument xml-serialization

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

在XmlDocument中按名称搜索节点

我正在尝试使用以下代码在XmlDocument中按名称查找节点:

private XmlNode FindNode(XmlNodeList list, string nodeName)
{
    if (list.Count > 0)
    {
        foreach (XmlNode node in list)
        {
            if (node.Name.Equals(nodeName)) return node;
            if (node.HasChildNodes) FindNode(node.ChildNodes, nodeName);
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我用以下函数调用该函数:

FindNode(xmlDocument.ChildNodes, "somestring");
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它总是返回null,我不确定为什么.有人可以帮我解决这个问题吗?

c# xmldocument

14
推荐指数
2
解决办法
3万
查看次数

如何将xmlnamespace添加到xmldocument

我试图创建一个xml应该看起来像这样

<?xml version="1.0" encoding="iso-8859-1"?>
<MyTestSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Tests>
    <Test>
      <messaure>1</messaure>
      <height>4</height>
    </Test>
    <Test>
      <messaure>4</messaure>
      <height>53</height>
    </Test>
  </Tests>
</MyTestSet>
Run Code Online (Sandbox Code Playgroud)

创建测试或测试元素不是问题,但创建包含命名空间的"MyTestSet"的最佳方法是什么?我使用c#XMLDocument

c# xml xmldocument

14
推荐指数
1
解决办法
4万
查看次数

比较XmlDocument是否相等(内容明智)

如果我想比较XMlDocument的内容,它是这样的吗?

XmlDocument doc1 = GetDoc1();
XmlDocument doc2 = GetDoc2();

if(doc1 == doc2)
{

}
Run Code Online (Sandbox Code Playgroud)

我不检查它们是否是相同的对象引用,但是如果xml的CONTENTS是相同的.

c# xml xmldocument equality

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

c#中备注标记的用途是什么

我知道remarks标签用于提供有关该类的其他信息,但在悬停/调用该类时它不会显示在intellisense中.我想知道它到底有用吗?

.net c# xmldocument xml-comments

14
推荐指数
2
解决办法
3245
查看次数

C#:修改xml节点

我有那个xml文件:

<?xml version="1.0" encoding="utf-8"?>
<reminders>
  <reminder>
    <Title>Alarm1</Title>
    <Description>Desc1</Description>
    <Time>03/07/2012 10:11AM</Time>
    <snooze>1</snooze>
    <repeat>None</repeat>
  </reminder>
</reminders>
Run Code Online (Sandbox Code Playgroud)

我想将Alarm1中的innertext修改为另一个值,所以我编写了实际复制整个节点的代码.

        XmlDocument xml = new XmlDocument();

        xml.Load("0.xml");

        XmlNodeList elements = xml.SelectNodes("//reminders");

        foreach (XmlNode element in elements)
        {
            if (element.InnerText == "Alarm1")
            {
                XmlNode newvalue = xml.CreateElement("MODIFIED");
                element.ReplaceChild(newvalue, element);

                xml.Save("0.xml");
            }
        }
Run Code Online (Sandbox Code Playgroud)

然后尝试了另一个代码:

        foreach (XmlElement element in xml.SelectNodes("//reminder"))
        {
            if (element.InnerText == "Alarm1")
            {
                XmlNode newvalue = xml.CreateElement("MODIFIED");
                element.ReplaceChild(newvalue, element);

                xml.Save("0.xml");
            }
        }
Run Code Online (Sandbox Code Playgroud)

但也不起作用....

编辑1:[找出新代码]

        XmlDocument xml = new XmlDocument();

        xml.Load("0.xml");

        foreach (XmlElement element in xml.SelectNodes("//reminder"))
        { …
Run Code Online (Sandbox Code Playgroud)

c# xml xmldocument

13
推荐指数
1
解决办法
6万
查看次数