标签: xml-parsing

xml.LoadData - 根级别的数据无效.第1行,第1位

我正在尝试解析WiX安装程序中的一些XML.XML将是从Web服务器返回的所有错误的对象.我使用以下代码在问题标题中收到错误:

XmlDocument xml = new XmlDocument();
try
{
    xml.LoadXml(myString);
}
catch (Exception ex)
{
    System.IO.File.WriteAllText(@"C:\text.txt", myString + "\r\n\r\n" + ex.Message);
    throw ex;
}
Run Code Online (Sandbox Code Playgroud)

myString是这个(如输出中所示text.txt)

<?xml version="1.0" encoding="utf-8"?>
<Errors></Errors>
Run Code Online (Sandbox Code Playgroud)

text.txt 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Errors></Errors>

Data at the root level is invalid. Line 1, position 1.
Run Code Online (Sandbox Code Playgroud)

我需要解析这个XML,所以我可以看到我是否有任何错误.

编辑

这个问题不是标记的重复.在那个问题中,提出问题的人正在使用LoadXml解析XML文件.我正在解析一个字符串,这是正确使用的LoadXml

c# xml wix xml-parsing

66
推荐指数
4
解决办法
17万
查看次数

如何用C#编写解析器?

我如何在C#中编写解析器(递归下降?)?现在我只想要一个解析算术表达式(并读取变量?)的简单解析器.虽然后来我打算写一个xml和html解析器(用于学习目的).我这样做是因为解析器很有用的东西:Web开发,编程语言解释器,内部工具,游戏引擎,地图和平铺编辑​​器等.那么编写解析器的基本理论是什么呢?我该怎么做在C#中实现一个?C#是解析器的正确语言(我曾经在C++中编写了一个简单的算术解析器并且它很有效.JIT编译是否同样适用?).任何有用的资源和文章.最重要的是,代码示例(或代码示例的链接).

注意:出于好奇,有人回答这个问题曾经在C#中实现了解析器吗?

c# parsing interpreter xml-parsing

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

lxml etree xmlparser删除不需要的命名空间

我有一个xml doc,我试图使用Etree.lxml解析

<Envelope xmlns="http://www.example.com/zzz/yyy">
  <Header>
    <Version>1</Version>
  </Header>
  <Body>
    some stuff
  <Body>
<Envelope>
Run Code Online (Sandbox Code Playgroud)

我的代码是:

path = "path to xml file"
from lxml import etree as ET
parser = ET.XMLParser(ns_clean=True)
dom = ET.parse(path, parser)
dom.getroot()
Run Code Online (Sandbox Code Playgroud)

当我尝试获取dom.getroot()时,我得到:

<Element {http://www.example.com/zzz/yyy}Envelope at 28adacac>
Run Code Online (Sandbox Code Playgroud)

但是我只想要:

<Element Envelope at 28adacac>
Run Code Online (Sandbox Code Playgroud)

当我做

dom.getroot().find("Body")
Run Code Online (Sandbox Code Playgroud)

我没有得到任何回报.但是,当我

dom.getroot().find("{http://www.example.com/zzz/yyy}Body") 
Run Code Online (Sandbox Code Playgroud)

我得到了一个结果.

我认为将ns_clean = True传递给解析器会阻止这种情况.

有任何想法吗?

python lxml elementtree xml-parsing

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

Java解析XML文档给出了"prolog中不允许的内容".错误

我正在用Java编写一个程序,它接受一个自定义XML文件并解析它.我正在使用XML文件进行存储.我在Eclipse中收到以下错误.

[Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
    at     com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283  )
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
    at me.ericso.psusoc.RequirementSatisfier.parseXML(RequirementSatisfier.java:61)
    at me.ericso.psusoc.RequirementSatisfier.getCourses(RequirementSatisfier.java:35)
    at     me.ericso.psusoc.programs.RequirementSatisfierProgram.main(RequirementSatisfierProgram.java:23  )
Run Code Online (Sandbox Code Playgroud)

包含XML文件的开头:

<?xml version="1.0" ?>
<PSU>
     <Major id="IST">
        <name>Information Science and Technology</name>
        <degree>B.S.</degree>
        <option> Information Systems: Design and Development Option</option>
        <requirements>
            <firstlevel type="General_Education" credits="45">
                <component type="Writing_Speaking">GWS</component>
                <component type="Quantification">GQ</component>
Run Code Online (Sandbox Code Playgroud)

该程序能够读取XML文件,但是当我调用DocumentBuilder.parse(XMLFile)解析时org.w3c.dom.Document,我得到上面的错误.

在我看来,我的XML文件的prolog中包含无效内容.我无法弄清楚出了什么问题.请帮忙.谢谢.

java xml eclipse xml-parsing

49
推荐指数
4
解决办法
29万
查看次数

如何使用sed提取子字符串

我有一个包含以下行的文件:

  <parameter name="PortMappingEnabled" access="readWrite" type="xsd:boolean"></parameter>
  <parameter name="PortMappingLeaseDuration" access="readWrite" activeNotify="canDeny" type="xsd:unsignedInt"></parameter>
  <parameter name="RemoteHost" access="readWrite"></parameter>
  <parameter name="ExternalPort" access="readWrite" type="xsd:unsignedInt"></parameter>
  <parameter name="ExternalPortEndRange" access="readWrite" type="xsd:unsignedInt"></parameter>
  <parameter name="InternalPort" access="readWrite" type="xsd:unsignedInt"></parameter>
  <parameter name="PortMappingProtocol" access="readWrite"></parameter>
  <parameter name="InternalClient" access="readWrite"></parameter>
  <parameter name="PortMappingDescription" access="readWrite"></parameter>
Run Code Online (Sandbox Code Playgroud)

我想在此文件上执行命令以仅提取以下输出中显示的参数名称:

$sedcommand file.txt
PortMappingEnabled
PortMappingLeaseDuration
RemoteHost
ExternalPort
ExternalPortEndRange
InternalPort
PortMappingProtocol
InternalClient
PortMappingDescription
Run Code Online (Sandbox Code Playgroud)

这个命令可能是什么?

linux shell ubuntu sed xml-parsing

48
推荐指数
5
解决办法
13万
查看次数

如何在Java中从String创建XML对象?

我正在尝试编写一个帮助我创建XML对象的代码.例如,我将给一个字符串作为函数的输入,它将返回一个XMLObject.

XMLObject convertToXML(String s) {}
Run Code Online (Sandbox Code Playgroud)

当我在网上搜索时,通常我会看到有关创建XML文档的示例.所以我看到的关于创建XML并写入文件并创建文件的所有内容.但我做了类似的事情:

Document document = new Document();
Element child = new Element("snmp");
child.addContent(new Element("snmpType").setText("snmpget"));
child.addContent(new Element("IpAdress").setText("127.0.0.1"));
child.addContent(new Element("OID").setText("1.3.6.1.2.1.1.3.0"));
document.setContent(child);
Run Code Online (Sandbox Code Playgroud)

您认为创建XML对象是否足够?还能帮助我如何从XML获取数据吗?例如,我如何IpAdress从XML获取?

非常感谢你们

编辑1:实际上现在我觉得我可能会更容易拥有一个像这样的文件base.xml,我会把所有基本的东西写进去,例如:

<snmp>
<snmpType><snmpType>
<OID></OID>
</snmp>
Run Code Online (Sandbox Code Playgroud)

然后使用此文件创建XML对象.你觉得怎么样?

java xml jdom xml-parsing

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

org.xml.sax.SAXParseException:*VALID*XML的文件过早结束

我变得非常奇怪"文件过早结束." 我们的一台服务器上的最近几天例外.在相同的配置XML工作正常另一台服务器上.我们在这两台服务器上都使用Tomcat 5.0.28.此代码已经工作了很长时间(7年以上),只有在最近服务器崩溃后,我们才在其中一台服务器上遇到此问题.XML和Java解析代码没有变化.:(

我能看到的唯一区别是Java版本 -

问题服务器 java版"1.6.0_16"Java(TM)SE运行时环境(版本1.6.0_16-b01)Java HotSpot(TM)64位服务器VM(版本14.2-b01,混合模式)

工作服务器 java版"1.6.0_07"Java(TM)SE运行时环境(版本1.6.0_07-b06)Java HotSpot(TM)64位服务器VM(版本10.0-b23,混合模式)

以下是已经工作了几年的Java代码 -

private void readSource(final InputSource in ) {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(in);
        Element elt = doc.getDocumentElement();

        this.readElement( elt );
    } catch ( Exception ex ) {
        ex.printStackTrace();
        throw new ConfigurationException( "Unable to parse configuration information", ex );
    }
}
Run Code Online (Sandbox Code Playgroud)

这是例外.

[Fatal Error] :-1:-1: Premature end of file.
org.xml.sax.SAXParseException: Premature end of file.
        at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
        at …
Run Code Online (Sandbox Code Playgroud)

java xml xml-parsing

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

使用Ruby解析XML

我是使用XML的新手,但只是需要放弃我的膝盖.我得到了一个通常的(对我来说)XML格式.标签内有冒号.

<THING1:things type="Container">
  <PART1:Id type="Property">1234</PART1:Id>
  <PART1:Name type="Property">The Name</PART1:Name>
</THING1:things>
Run Code Online (Sandbox Code Playgroud)

它是一个大文件,除此之外还有更多内容,但我希望这种格式对某人来说很熟悉.有没有人知道如何处理这种XML文档?

我宁愿不只是写一个解析文本的蛮力方式,但我似乎无法用REXML或Hpricot取得任何进展,我怀疑这是由于这些不寻常的标签.

我的红宝石代码:

    require 'hpricot'
    xml = File.open( "myfile.xml" )

    doc = Hpricot::XML( xml )

   (doc/:things).each do |thg|
     [ 'Id', 'Name' ].each do |el|
       puts "#{el}: #{thg.at(el).innerHTML}"
     end
   end
Run Code Online (Sandbox Code Playgroud)

...刚从...取消:http://railstips.org/blog/archives/2006/12/09/parsing-xml-with-hpricot/

我想我可以从这里找到一些东西,但这段代码什么都没有.它没有错误.它只是回来了.

ruby xml-parsing

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

DTD禁止在xml文档中例外

我在尝试解析C#应用程序中的XML文档时遇到此错误:

"出于安全原因,此XML文档中禁止使用DTD.要启用DTD处理,请将XmlReaderSettings上的ProhibitDtd属性设置为false,并将设置传递给XmlReader.Create方法."

作为参考,异常发生在以下代码的第二行:

using (XmlReader reader = XmlReader.Create(uri))
{
    reader.MoveToContent(); //here

    while (reader.Read()) //(code to parse xml doc follows).
Run Code Online (Sandbox Code Playgroud)

我对Xml的了解非常有限,我不知道DTD处理是什么,也不知道如何做错误消息的建议.有关可能导致此问题以及如何解决问题的任何帮助?谢谢...

c# xmlreader xml-parsing

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

按名称仅获取XML直接子元素

我的问题是:当存在与父元素的"孙子"同名的其他元素时,如何直接在特定父元素下获取元素.

我正在使用Java DOM库来解析XML 元素,我遇到了麻烦.下面是一些我使用的XML(可一小部分):

<notifications>
  <notification>
    <groups>
      <group name="zip-group.zip" zip="true">
        <file location="C:\valid\directory\" />
        <file location="C:\another\valid\file.doc" />
        <file location="C:\valid\file\here.txt" />
      </group>
    </groups>
    <file location="C:\valid\file.txt" />
    <file location="C:\valid\file.xml" />
    <file location="C:\valid\file.doc" />
  </notification>
</notifications>
Run Code Online (Sandbox Code Playgroud)

如您所见,您可以在两个位置放置<file>元素.无论是团体还是外部团体.我真的希望它以这种方式构建,因为它更加用户友好.

现在,每当我调用notificationElement.getElementsByTagName("file");它时,都会给我所有<file>元素,包括元素下的<group>元素.我以不同方式处理这些类型的文件,因此不希望使用此功能.

我想到了两个解决方案:

  1. 获取文件元素的父元素,并相应地处理它(这取决于它是否<notification>还是<group>.
  2. 重命名第二个<file>元素以避免混淆.

这些解决方案都不是那么令人满意,只是按照它们的方式离开事物,只获得<file>元素的直接<notification>元素.

我对IMPO的评论和答案是开放的,关于"最好"的方法,但我真的对DOM解决方案感兴趣,因为这是该项目的其余部分正在使用的.谢谢.

java xml parsing dom xml-parsing

39
推荐指数
4
解决办法
8万
查看次数

标签 统计

xml-parsing ×10

xml ×5

java ×4

c# ×3

parsing ×2

dom ×1

eclipse ×1

elementtree ×1

interpreter ×1

jdom ×1

linux ×1

lxml ×1

python ×1

ruby ×1

sed ×1

shell ×1

ubuntu ×1

wix ×1

xmlreader ×1