标签: xmlreader

性能:XmlSerializer vs XmlReader vs XmlDocument vs XDocument

我正在开发一个小型Web项目,并希望读/写XML文件.表现是我​​的第一要务.

我来这篇关于比较上述方法的伟大帖子除外XmlSerializer.

我更喜欢,XmlSerializer因为它使代码更清洁.但我不知道它的表现.XmlSerializer内部使用什么样的写入XML文件?

.net xmldocument xmlreader linq-to-xml xmlserializer

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

如何为XmlReader指定超时?

我正在用xml阅读器阅读rss.

当url很糟糕时,它需要60秒才能失败.我如何指定超时?

using (XmlReader reader = XmlReader.Create(url, settings))
Run Code Online (Sandbox Code Playgroud)

c# timeout xmlreader

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

XmlReader ReadStartElement导致XmlException

我正在使用Silverlight项目中的XmlReader编写文件阅读器.但是,我遇到了一些错误(特别是围绕XmlReader.ReadStartElement方法),这让我误以为我误解了如何在途中使用它.

基本上,这是我正在使用的Xml格式的示例:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<root>
    <EmptyElement />
    <NonEmptyElement Name="NonEmptyElement">
        <SubElement Name="SubElement" />
    </NonEmptyElement>
</root>
Run Code Online (Sandbox Code Playgroud)

以下是一些代码的示例,其使用方式与我使用它的方式相同:

public void ReadData(XmlReader reader)
{
    // Move to root element
    reader.ReadStartElement("root");

    // Move to the empty element
    reader.ReadStartElement("EmptyElement");

    // Read any children
    while(reader.ReadToNextSibling("SubEmptyElement"))
    {
        // ...
    }

    // Read the end of the empty element
    reader.ReadEndElement();

    // Move to the non empty element
    reader.ReadStartElement("NonEmptyElement");    // NOTE: This is where I get the error.

    // ...
}
Run Code Online (Sandbox Code Playgroud)

所以,基本上,我只是想读取每个元素和任何包含的子元素.我在突出显示的点上得到的错误如下:

错误说明

[Xml_InvalidNodeType]参数:无,10,8调试资源字符串不可用.通常,密钥和参数提供了足够的信息来诊断问题.请参阅http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.51204.0&File=System.Xml.dll&Key=Xml_InvalidNodeType

错误堆栈跟踪

在----------------的System.Xml.XmlReader.ReadStartElement(String name) …

.net c# silverlight xmlreader xmlexception

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

问题 - 仅在文档​​开头允许XML声明

xml:19558:解析器错误:仅在文档开头允许XML声明

任何解决方案 我正在使用php XMLReader来解析一个大的XML文件,但是收到了这个错误.我知道文件格式不正确但我认为不可能通过该文件并删除这些额外的声明.所以任何想法,请帮助

php xml xmlreader

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

从SimpleXmlElement读取命名空间属性(从XMLReader导入)

我正在尝试读取一个大的xml文件(大约40 MB),并使用此数据更新我的应用程序的数据库.

看来我使用XMLReader和simplexml_import_dom()在经过的时间/内存方面找到了一个很好的折衷方案但是我无法在名称中获得带冒号的属性值...例如<g:attr_name>.

如果我只是为每个"产品"节点使用$ reader-> read()函数,我可以将值作为$ reader-> value进行检索,但如果我展开()节点并使用$ doc-> importNode复制它,则此属性为忽略.

    $reader = new XMLReader();
    $reader->open(__XML_FILE__);
    $doc = new DOMDocument;

    while ($reader->read()) {
        switch ($reader->nodeType) {
            case (XMLREADER::ELEMENT):
                if($reader->localName=="product"){
                   $node = simplexml_import_dom($doc->importNode($reader->expand(), true));
                   echo $node->attr_name."<br><br>";
                   $reader->next('product');

                } 

        }
    }
Run Code Online (Sandbox Code Playgroud)

可能我会想念一些事情......任何建议都会非常贴切!

谢谢.

php xmlreader simplexml domdocument

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

使用XmlWriter附加现有XML文件

我使用以下代码来创建XML文件:

XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Indent = true;
xmlWriterSettings.NewLineOnAttributes = true;
using (XmlWriter xmlWriter = XmlWriter.Create("Test.xml", xmlWriterSettings))
{
   xmlWriter.WriteStartDocument();
   xmlWriter.WriteStartElement("School");
   xmlWriter.WriteEndElement();
   xmlWriter.WriteEndDocument();
   xmlWriter.Close();
 }
Run Code Online (Sandbox Code Playgroud)

我需要动态插入节点,创建以下结构:

<?xml version="1.0" encoding="utf-8"?>
<School />
   <Student>
      <FirstName>David</FirstName>
      <LastName>Smith</LastName>
   </Student>
   ...
   <Teacher>
      <FirstName>David</FirstName>
      <LastName>Smith</LastName>
   </Teacher>
   ...
</School>
Run Code Online (Sandbox Code Playgroud)

我该怎么做?应从键盘读取"FirstName"和"LastName"的值,并且可以随时输入值,当然在现有值下.

c# xml xmlwriter xmlreader

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

如何阻止XMLReader抛出无效的XML字符异常

所以我有一些XML:

<key>my tag</key><value>my tag value &#xB;and my invalid Character</Value>

和XMLReader:

using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
     while (reader.Read())
     {
         //do my thing
     }
}
Run Code Online (Sandbox Code Playgroud)

我已经从这里实现了CleanInvalidCharacters方法,但由于" "尚未编码,因此不会被删除.

读者会抛出错误.阅读(); 有异常的行:

十六进制值0x0B,是无效字符.

c# xml xmlreader invalid-characters

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

Java XMLReader不清除多字节UTF-8编码属性

我有一个非常奇怪的情况,我的SAX ContentHandler被XMLReader传递给错误的属性.正在解析的文档是UTF-8,XML属性中包含多字节字符.似乎发生的是每次调用我的处理程序时都会累积这些属性.因此,它们不是连续传递,而是连接到前一个节点的值.

以下是使用公共数据(维基百科)演示此示例的示例.

public class MyContentHandler extends org.xml.sax.helpers.DefaultHandler {

    public static void main(String[] args) {
        try {
            org.xml.sax.XMLReader reader = org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
            reader.setContentHandler(new MyContentHandler());
            reader.parse("http://en.wikipedia.org/w/api.php?format=xml&action=query&list=allpages&apfilterredir=redirects&apdir=descending");

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) {
        if ("p".equals(qName)) {
            String title = attributes.getValue("title");
            System.out.println(title);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:这个完整的例子产生(对于粗俗的输出向任何广东话者道歉):











Run Code Online (Sandbox Code Playgroud)

有没有人知道发生了什么以及如何解决它?文档中的内容与我通过此代码段进行调试时发生的情况不符.

java sax xmlreader utf-8 character-encoding

5
推荐指数
1
解决办法
2297
查看次数

防止 XmlReader 扩展 XML 实体

有没有办法阻止 .NET 的XmlReader类在读取内容时将 XML 实体扩展为其值?

例如,假设使用以下 XML 作为输入:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE author PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN//XML" "http://www.oasis-open.org/docbook/xmlcharent/0.3/iso-lat1.ent" >
<author>&aacute;</author>
Run Code Online (Sandbox Code Playgroud)

我们假设不可能达到扩展急性实体所需的外部 OASIS DTD。我希望读者按顺序读取author 元素,然后是type 的aacute 节点EntityReference,最后是author end 元素,而不会抛出任何错误。我怎样才能实现这个目标?

更新:我还想防止字符实体的扩展,例如&#x00E1;.

.net c# xml dtd xmlreader

5
推荐指数
1
解决办法
1832
查看次数

如何使用 C# XmlReader 忽略未知名称空间?

我正在尝试使用XmlReader从输入中读取字符串 XML 片段,操作 XDocument 并将结果作为字符串输出。
如果存在对未知 XML 命名空间的引用,我只想保留该引用,而不是以任何方式修改。
注意我不知道可能的命名空间的列表,因此手动创建命名空间白名单不是一个选项。
我的目标是UWP平台,因此此处无法使用 XmlTextReader。

输入 XML 文档的示例:

<VisualState x:Name="Disabled">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" />
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
Run Code Online (Sandbox Code Playgroud)

预期输出 XML 文档的示例:

<VisualState x:Name="Disabled">
  <VisualState.Setters>
    <Setter Target="RootGrid.Background" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
    <Setter Target="ContentPresenter.Foreground" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" />
    <Setter Target="ContentPresenter.BorderBrush" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
  </VisualState.Setters>    
</VisualState>
Run Code Online (Sandbox Code Playgroud)

我当前用于解析 XML 的代码:

using (StringReader sr = new …
Run Code Online (Sandbox Code Playgroud)

c# xml xmlreader uwp

5
推荐指数
1
解决办法
1553
查看次数