标签: xmlreader

从XmlReader获取当前位置

有没有办法在XmlReader检查的节点流中获取当前位置?

我想使用XmlReader来解析文档并保存某些元素的位置,以便我以后可以查找它们.

附录:

我正在通过WPF控件生成Xaml.Xaml不应经常更改.在Xaml中有占位符,我需要替换项​​目,有时循环.我认为在代码中而不是转换可能更容易(我可能错了).我的想法是将其解析为需要替换的简单数据结构及其位置,然后使用StringBuilder通过复制xaml字符串中的块来生成最终输出.

.net xmlreader

21
推荐指数
3
解决办法
8637
查看次数

从XmlDocument到XmlReader .Net

在回答了我的问题的用户的建议后,我想将我的XmlDocument代码转换为XmlReader代码,但我遇到了一些麻烦.

这是XML(从php-mysql页面生成)

<row>
<idLink>64</idLink>
<idHost>3</idHost>
<url>http://www.google.com</url>
</row>
<row>
<idLink>68</idLink>
<idHost>4</idHost>
<url>http://www.bing.com</url>
</row>
..... until about 10000 rows
Run Code Online (Sandbox Code Playgroud)

这是我的XmlDocument代码:

   xmlDoc.Load("http://www.myUrl.com/list.php");
      if (xmlDoc.DocumentElement != null){
          foreach (XmlNode node in xmlDoc.DocumentElement)
             {
              if (node.Name == "row")
                {
                  list.Add(new Links { 
                       idLink = Convert.ToInt32(node.ChildNodes[0].InnerText),
                       idHost = Convert.ToInt32(node.ChildNodes[1].InnerText),
                       url = node.ChildNodes[2].InnerText }); 
                  }
             }  
             return list;
Run Code Online (Sandbox Code Playgroud)

现在我在XmlReader中转换有一些麻烦,我尝试了很多代码,但我无法处理它.

using (XmlReader reader = new XmlTextReader("http://myUrl.com/list.php"))
         { 
          if (reader.NodeType == XmlNodeType.Element) 
           ?????
Run Code Online (Sandbox Code Playgroud)

.net xmldocument xmlreader

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

使用XmlReader读取属性值

我有一个XML文件,我试图从这里读取,并具有以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;

namespace XML
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlTextReader textReader = new XmlTextReader("secLendingXML.cfm.xml");
            while (textReader.Read())
            {
                switch (textReader.NodeType)
                {
                    case XmlNodeType.Element:
                        Console.WriteLine(textReader.Name);
                        Console.WriteLine(textReader.Value);
                        break;
                    case XmlNodeType.Text:
                        Console.WriteLine(textReader.Value);
                        break;
                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:
                        Console.WriteLine(textReader.Name + " " + textReader.Value);
                        break;
                    case XmlNodeType.Comment:
                        Console.WriteLine(textReader.Value);
                        break;
                    case XmlNodeType.EndElement:
                        break;
                }
            }
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

代码在正在读取节点并返回名称的意义上正常工作.但是,问题是我正在尝试检索节点内的数据.换句话说,当它在测试部分之后读取第一部分时,它将显示为:

slnc:DataSet
slnc:Group
slnc:Section
slnc:ActualAvailableToBorrow
*** here ***
slnc:oustandingLoans
Run Code Online (Sandbox Code Playgroud)

这是我想的TextReader将在节点内像阅读下面的值 …

c# xml xmlreader

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

解析没有根元素的XML流

我需要解析连续的格式良好的XML元素流,我只给它一个已构造的java.io.Reader对象.这些元素不包含在根元素中,也不是像XML标题一样<?xml version="1.0"?>",而是有效的XML.

使用Java org.xml.sax.XMLReader类不起作用,因为XML Reader期望从封闭的根元素开始解析格式良好的XML.因此,它只读取流中的第一个元素,它将其视为根,并在下一个元素中失败,典型的

org.xml.sax.SAXParseException:根元素后面的文档中的标记必须格式正确.

对于不包含根元素的文件,但是这样的元素确实存在或者可以定义(并且被称为MyRootElement),可以执行以下操作:

        Strint path = <the full path to the file>;

        XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();

        StringBuilder buffer = new StringBuilder();

        buffer.append("<?xml version=\"1.0\"?>\n");
        buffer.append("<!DOCTYPE MyRootElement ");
        buffer.append("[<!ENTITY data SYSTEM \"file:///");
        buffer.append(path);
        buffer.append("\">]>\n");
        buffer.append("<MyRootElement xmlns:...>\n");
        buffer.append("&data;\n");
        buffer.append("</MyRootElement>\n");

        InputSource source = new InputSource(new StringReader(buffer.toString()));

        xmlReader.parse(source);
Run Code Online (Sandbox Code Playgroud)

我已经通过将部分java.io.Reader输出保存到文件来测试上述内容并且它可以工作.但是,这种方法在我的情况下不适用,并且无法插入此类额外信息(XML标头,根元素),因为java.io.Reader已经构造了传递给我的代码的对象.

基本上,我正在寻找"碎片式XML解析".所以,我的问题是,可以使用标准Java API(包括org.sax.xml.*java.xml.*包)来完成吗?

java xml sax xmlreader

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

在WebService调用中序列化字符串时出错

今天早上我遇到了一个问题,即返回一个文本字符串作为Web Service调用的结果.我得到的错误是在下面

************** Exception Text **************
System.ServiceModel.CommunicationException: Error in deserializing body of reply message for operation 'GetFilingTreeXML'. ---> System.InvalidOperationException: There is an error in XML document (1, 9201). ---> System.Xml.XmlException: The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 9201.
at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
at …
Run Code Online (Sandbox Code Playgroud)

web-services xmlreader maxstringcontentlength

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

如何从XmlReader构建XmlNodes

我正在解析大量的大文件,在分析我的瓶颈后:

XmlDocument doc = new XmlDocument();
doc.Load(filename);
Run Code Online (Sandbox Code Playgroud)

这种方法非常方便,因为我可以像这样提取节点:

XmlNodeList nodeList = doc.SelectNodes("myXPath");
Run Code Online (Sandbox Code Playgroud)

我正在切换到XmlReader,但当我找到我需要提取的元素时,我不知道如何从它构建一个XmlNode,因为不太熟悉XmlReader:

XmlReader xmlReader = XmlReader.Create(fileName);

while (xmlReader.Read())
{
   //keep reading until we see my element
   if (xmlReader.Name.Equals("myElementName") && (xmlReader.NodeType == XmlNodeType.Element))
   {
       // How do I get the Xml element from the reader here?
   }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够构建一个List<XmlNode>对象.我在.NET 2.0上.

任何帮助赞赏!

c# xml xmlreader .net-2.0

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

无效的URI:Uri字符串太长

我正在尝试获取模式并验证我的xml.

  XmlReaderSetting settings = new System.Xml.XmlReaderSettings();
            settings.Schemas.Add(null, "http://example.com/myschema.xsd");
            settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler); 
            settings.ValidationType = ValidationType.Schema;
            settings.IgnoreWhitespace = false;
            XmlReader reader = XmlReader.Create(xml, settings);
Run Code Online (Sandbox Code Playgroud)

我明白了

Invalid URI: The Uri string is too long


System.UriFormatException was unhandled   Message=Invalid URI: The Uri string is too long.   Source=System   StackTrace:
       at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
       at System.Uri..ctor(String uriString, UriKind uriKind)
       at System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)
       at System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)
       at System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
       at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext)
       at …
Run Code Online (Sandbox Code Playgroud)

.net c# xml xsd xmlreader

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

如何使用XmlReader类?

我想使用XmlReader保存并加载我的xml数据.但我不知道如何使用这个课程.你能给我一个开始的示例代码吗?

c# xml xmlreader

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

"未声明'http://www.w3.org/XML/1998/namespace:lang'属性."

有时,在使用XmlValidatingReader验证某些XML文档时,我收到以下错误:

System.Xml.Schema.XmlSchemaValidationException: 
"The 'http://www.w3.org/XML/1998/namespace:lang' attribute is not declared."
Run Code Online (Sandbox Code Playgroud)

同一文件有时会成功.我无法弄清楚为什么.

我的XSD像这样导入架构:

<xs:schema id="myschemaId"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       targetNamespace="http://mytargetnamespace.com"
       xmlns="http://mytargetnamespace.com"
       xmlns:mm="http://mytargetnamespace.com"
       elementFormDefault="qualified">
 <xs:import namespace="http://www.w3.org/XML/1998/namespace" 
            schemaLocation="http://www.w3.org/2001/xml.xsd" />
 ...
Run Code Online (Sandbox Code Playgroud)

在XML文档中,我有以下属性:

<root xmlns="http://mytargetnamespace.com"        
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://mytargetnamespace.com myschema.xsd">
Run Code Online (Sandbox Code Playgroud)

最后,XmlReaderSettings:

const XmlSchemaValidationFlags validationFlags =
          XmlSchemaValidationFlags.ProcessInlineSchema |
          XmlSchemaValidationFlags.ProcessSchemaLocation |  
          XmlSchemaValidationFlags.ReportValidationWarnings |
          XmlSchemaValidationFlags.AllowXmlAttributes;

// Set the validation settings.
var settings = new XmlReaderSettings
                   {
                       ValidationType = ValidationType.Schema,
                       ValidationFlags = validationFlags,
                       DtdProcessing = DtdProcessing.Parse
                   };
settings.ValidationEventHandler += OnValidationEventHandler;

// Create the XmlReader object.
var reader = XmlReader.Create(_xmlFilePath, settings);

// Parse the file. 
while …
Run Code Online (Sandbox Code Playgroud)

c# xml validation xsd xmlreader

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

C#XMLreader和子节点

我有这个xml文件.

           <movies>
             <movie>
               <score>8.582207</score>
               <popularity>3</popularity>
               <translated>true</translated>
               <adult>false</adult>
               <language>en</language>
               <original_name>Transformers</original_name>
               <name>Transformers</name>
               <alternative_name>The Transformers</alternative_name>
               <type>movie</type>
               <id>1858</id>
               <imdb_id>tt0418279</imdb_id>
               <url>http://www.themoviedb.org/movie/1858<;/url>
               <votes>28</votes>
               <rating>7.2</rating>
               <certification>PG-13</certification>
               <overview>The Earth is caught in the middle of an intergalactic war /overview>
               <released>2007-07-04</released>
               <images>
                    <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-original.jpg" size="original" id="4bc91347017a3c57fe007304"/>
                    <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-mid.jpg" size="mid" id="4bc91347017a3c57fe007304"/>
                    <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-cover.jpg" size="cover" id="4bc91347017a3c57fe007304"/>
                    <image type="poster" url="http://hwcdn.themoviedb.org/posters/304/4bc91347017a3c57fe007304/transformers-thumb.jpg" size="thumb" id="4bc91347017a3c57fe007304"/>
                    <image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-original.jpg" size="original" id="4bc9133s9017a3c57fe0072ce"/>
                    <image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-poster.jpg" size="poster" id="4bc91339017a3c57fe0072ce"/>
                    <image type="backdrop" url="http://hwcdn.themoviedb.org/backdrops/2ce/4bc91339017a3c57fe0072ce/transformers-thumb.jpg" size="thumb" id="4bc91339017a3c57fe0072ce"/>
               </images>
             <last_modified_at>2010-04-26 03:26:14</last_modified_at>
       </movie>
     </movies>
Run Code Online (Sandbox Code Playgroud)

我通过使用阅读所有属性

textReader.ReadToFollowing("original_name");
string title =textReader.ReadElementContentAsString("original_name",textReader.NamespaceURI);
Run Code Online (Sandbox Code Playgroud)

但是,无论我尝试什么,我都无法读取"图像"的子节点.

c# xml xmlreader

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