标签: xmlreader

XMLReader编码错误

我有一个PHP脚本,它试图解析一个巨大的XML文件.为此,我正在使用XMLReader库.在解析过程中,我有这个编码错误:

输入不正确UTF-8,表示编码!字节:0xA0 0x32 0x36 0x30

我想知道它们是否是一种跳过带有坏字符的记录的方法.

谢谢!

php encoding xmlreader

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

使用带有PHP的XMLReader读取XML结束元素两次

我想使用XMLReader读取XML文件,但在解析期间,每个元素都会调用两次END ELEMENT.

<publications>
  <article id="Xu86oazdn">
    <title>Learning</title>
    <authors>
      <author>
        <firstname>Michel</firstname>
        <lastname>Browsky</lastname>
      </author>
    </authors>
  </article>
</publications>
Run Code Online (Sandbox Code Playgroud)

这是解析作者条目的一段代码:

<?php
$xml = new XMLReader();
$xml->open("php://stdin");
$author = null;

while($xml->read()) {

  switch($xml->nodeType) {
    case XMLReader::ELEMENT:
      switch($xml->name) {
        case 'author':
          echo("+" . $xml->name);
          break;
    }

    case XMLReader::END_ELEMENT:
      switch($xml->name) {
        case 'author':
          echo("-" . $xml->name);
          break;
      }
    }
  }
?>
Run Code Online (Sandbox Code Playgroud)

但奇怪的是,每个调用END_ELEMENT两次</author>,如echo消息所示:

+author
-author
-author
Run Code Online (Sandbox Code Playgroud)

如果我通过调用替换echo消息$xml->readOuterXML(),则第一个END_ELEMENT如下:

<author>
  <firstname>Michel</firstname>
  <lastname>Browsky</lastname>
</author>
Run Code Online (Sandbox Code Playgroud)

第二个是以下内容:

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

我的代码出了什么问题?我是否以错误的方式使用END_ELEMENT?检测末端元素的正确方法是什么?

php xml xmlreader

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

XmlReader无法读取这些类似Chrome阅读器的空节点

我有一个问题,阅读格式化的空元素<eanCode/>.在此元素之后,XmlReader类无法读取下一个元素.

<EanCode/><Stock>15</Stock>

if ($reader->nodeType == XMLReader::ELEMENT) {
            switch ($reader->name) {

           case 'Stock':
                    $reader->read();
                    $stock = $reader->value;
            ECHO 'stokkk adet = '. $stock;
                    break;...
Run Code Online (Sandbox Code Playgroud)

所以,我决定<eanCode/><eanCode></eanCode>.但是编写算法很困难.有人可以提供相应的preg替换方法吗?

php xmlreader

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

如何在 PHP 中启用 XMLReader 而无需重新配置 PHP?

我的 PHP 信息是这样的:

Configure Command : '--with-libxml-dir=/usr' 
                    '--enable-xml' 
                    '--disable-xmlreader' 
                    '--disable-xmlwriter' 
Run Code Online (Sandbox Code Playgroud)

即我的xmlwriter&xmlreader在安装过程中尚未启用。


                               libxml 
Run Code Online (Sandbox Code Playgroud)

libXML 支持活动

libXML 编译版本 2.7.8

libXML 加载版本 20708

启用 libXML 流

来自php.net XMLReader 手册

运行时配置

此扩展没有在php.ini中定义的配置指令。

如何启用 XMLReader?/ 我是否必须使用 --enable-xmlreader 再次编译 PHP?

php xmlwriter xmlreader

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

将XML反序列化为WebAPI中的对象

由于某些原因,我将不去讨论,因此无法将对象类型用作webapi控制器的参数。因此,我需要找到一种使用XmlDocument或类似方法将xml对象反序列化为c#对象的方法。

这是我到目前为止的内容:

    public void Post(HttpRequestMessage request)
    {
        var xmlDoc = new XmlDocument();
        xmlDoc.Load(request.Content.ReadAsStreamAsync().Result);
        using (XmlReader xmlReader = new XmlNodeReader(xmlDoc))
        {
            Object obj = new XmlSerializer(typeof(myObject)).Deserialize(xmlReader);
            myObject scp = (myObject)obj;
        } 
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这引发了错误。谁能提供一些关于如何将xml反序列化到对象中的建议?

tia

编辑:这是我要反序列化的xml:

<Student>
<studentid>1234</studentid>
<command>post</command>
<posttype>charge</posttype>
<transaction_description>This is a test post to the web api</transaction_description>
<payment_type>CC</payment_type>
<term_code>2013SPRING</term_code>
<amount>432.75</amount>
</Student>
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

System.InvalidOperationException:意外。产生日期:2014年3月19日,星期三,格林尼治标准时间

System.InvalidOperationException:XML文档(1、2)中存在错误。---> System.InvalidOperationException:意外。-在Microsoft.Xml.Serialization.GeneratedAssembly 。 .API.StudentInformationPostController.Post(HttpRequestMessage请求)位于System.Web上lambda_method(Closure,Object,Object [])的C:\ Projects \ CashNetSSO \ Development \ CashNetSSO \ CashNetSSO \ Controllers \ API \ StudentInformationPostController.cs:第23行。 Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor。<> c_ DisplayClassf.b
。 .Serialization.XmlSerializer.Deserialize(Stream stream)
_9(Object实例,对象[] …

c# xmldocument xmlreader deserialization

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

XmlReader.HasAttributes在创建后立即返回false

我对使用C#的XML类比较陌生.我甚至无法让XML阅读器识别出我传递给它的字符串是XML.这是我用于测试基本Xml读数的单元测试

[TestFixture()]
public class LegacyWallTests
{
    [Test()]
    public void ReadLegacyWallFile()
    {
        var legacyWallText = legacyfiles.legacywall1;
        {
            string xmlString = legacyfiles.legacywall1;
            using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
            {
                reader.HasAttributes.Should().BeTrue();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试阅读的XML

<Wall>
  <Actual>
    <Specifications>
      <Insertion> 375.6858 916.8871 0.0000 </Insertion>
      <Angle> 3.14159 </Angle>
      <WallDesc> E4-1, H: 8' 1 1/8, Sh: Yes, S: 2~4~2~9-0-0~SPF~~, Spc: Single @ 16 in OC, BP: 2~4~2~12-0-0~SYP~~, CP: 2~4~2~12-0-0~SYP~~, TP: 2~4~2~12-0-0~SYP~~,\P LI: Single @ 38.75000000, CB: No, VB: No, NCT: 2~4~2~9-0-0~SPF~~, CT: 2~4~2~9-0-0~SPF~~, Pac: 2~4~2~9-0-0~SPF~~, …
Run Code Online (Sandbox Code Playgroud)

c# xml xmlreader

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

并非所有代码路径都返回值C#?

这是我的代码:

public String[] readXML(String filename)  
{  
    XmlReader xmlReader = XmlReader.Create(@filename);  
    List<String> names = new List<string>();
    String[] keywords = null;
    while (xmlReader.Read())  
    {  
        //Keep reading  
        if (xmlReader.Name.Equals("Keyword") && (xmlReader.NodeType == XmlNodeType.Element))  
        {  
            // get attribute from the Xml element here  
            string keywords = xmlReader.GetAttribute("name");  
            names.Add(keywords);  
            String[] keywordsArray = names.ToArray();  
        }  
        else
        {
            MessageBox.show("An Error Occured");
        }
    }  
    return keywordsArray;
}
Run Code Online (Sandbox Code Playgroud)

这会吗?有人可以测试一下吗?

c# xmlreader

0
推荐指数
2
解决办法
1399
查看次数

我想编辑xml文件

替代文字

我修改了d xml文件的结构.我想编辑可见的值

c# xml asp.net xmlreader xmltextwriter

0
推荐指数
1
解决办法
254
查看次数

C#XMLReader无法正确解析

我不想使用XMLDocument,因为我使用XMLWriter编写了XML编写代码.因此,没有理由切换.

<Player>
  <Friends />
  <Ignores>
    <Ignore>117779</Ignore>
    <Ignore>44237636758361374</Ignore>
    <Ignore>564534831</Ignore>
  </Ignores>
  <InventoryItems>
    <Item>
      <Slot>0</Slot>
      <Id>995</Id>
      <Amount>39493</Amount>
    </Item>
    <Item>
      <Slot>27</Slot>
      <Id>1049</Id>
      <Amount>12</Amount>
    </Item>
  </InventoryItems>
  <BankItems />
</Player>
Run Code Online (Sandbox Code Playgroud)

我正在尝试解析那里.这是我到目前为止所得到的.似乎在任何地方打破了我有点工作<Ignore>'s但是当我使用ReadToFollowing而不是ReadToNextSibling,它会工作,直到ReadToFollowing击中一个空行..它只会达到EOF.

XmlTextReader reader = new XmlTextReader(misc.getServerPath() + "\\accounts\\" + username + ".xml");
while (reader.Read())
{
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "Friends") {
        if (!reader.IsEmptyElement) //got any friends
        {
            while (reader.ReadToFollowing("Friend"))
                //do_stuff_with_that_data(reader.ReadElementContentAsLong());
        }
    } else if (reader.NodeType == XmlNodeType.Element && reader.Name == "Ignores") {
        if (!reader.IsEmptyElement) //got any ignores …
Run Code Online (Sandbox Code Playgroud)

c# xml xmlreader visual-studio

0
推荐指数
1
解决办法
2114
查看次数

使用没有xsd文件的模式读取XML

我本周收到了一个复杂的XML文件,它基于模式,但我没有收到任何xsd文件,我需要读取这个文件的每个节点.

下面的XML示例:

<xc:XmlTest xmlns:xc="XmlTest" xmlns:mp="bs.TestParameters" xmlns:rt="bs.TestParameters.Parameter1" xmlns:rtcu="bs.TestParameters.Parameter1.Var">
<xc:XmlTestArea xc:value="TestParameters">
    <mp:Name xc:Value="raddesso" xmlns:mp="bs.TestParameters">
        <mp:Date xc:Value="20130215">
            <rt:RunTest xmlns:rt="bs.TestParameters.Parameter1">
                <rtcu:Var xmlns:rtcu="bs.TestParameters.Parameter1.Var">
                    <mp:FinalValue>1234</mp:FinalValue>
                </rtcu:Var>
            </rt:RunTest>
        </mp:Date>
        <mp:Date xc:Value="20130216">
            <rt:RunTest xmlns:rt="bs.TestParameters.Parameter1">
                <rtcu:Var xmlns:rtcu="bs.TestParameters.Parameter1.Var">
                    <mp:FinalValue>23234</mp:FinalValue>
                </rtcu:Var>
            </rt:RunTest>
        </mp:Date>
    </mp:Name>
</xc:XmlTestArea>
</xc:XmlTest>
Run Code Online (Sandbox Code Playgroud)

这只是使用虚假数据的真实文件的示例.

有没有办法在这个节点上做foreach从每个日期找到FinalValue?

c# xml xmlnodelist xmlreader xml-serialization

0
推荐指数
1
解决办法
3058
查看次数

如何避免用lock语句返回null?

我有一种方法可以并行加载并运行报表布局。所有报告将使用相同的baselayout.xml。由于线程每次尝试访问同一资源时都会因异常而失败,因此我使用了a lock来锁定文件。

public static XmlTextReader LoadReport(string reportName)
{
    object _locker = new object();
    object reportData;
    lock (_locker)
    {
        reportData = Resources.ResourceManager.GetObject(reportName);
    }
    return new XmlTextReader(new MemoryStream((byte[])reportData));
}
Run Code Online (Sandbox Code Playgroud)

并行方法如下所示:

private void RunReportsParallel(List<ReportObject> coverterList)
{
    try
    {
        Parallel.ForEach(coverterList, (currentObject) => {
            currentObject.Convert();
        });    
    }
    catch (Exception e)
    {
        smlLogger.Error(Helper.SetLogLine(e.Message, processId));
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

Conver将运行以下代码:

public override SectionReport GetMainReport()
{
    SectionReport mainReport = new SectionReport();
    XMLDataSource datasource = new XMLDataSource(null, "//AkontoRechnung");
    datasource.LoadXML(rechnungsdaten.ToString());
    mainReport = new ReportAkontorechnung(datasource, reportConfiguration, Language, NoPrintOut);
    try …
Run Code Online (Sandbox Code Playgroud)

c# activereports multithreading xmlreader parallel.foreach

0
推荐指数
1
解决办法
81
查看次数

阅读xml的最佳方式

什么是阅读XML的最佳方式?

我的xml就像我会有很多

<A> and <B>, not sure how many will be there and I have to read the whole xml file.
Run Code Online (Sandbox Code Playgroud)

我不能说子元素喜欢

<180> will be there under <A> for sure. So does the other element.
Run Code Online (Sandbox Code Playgroud)

但如果它在那里我必须阅读它.

我应该使用LINQ或XPath还是XMLReader?哪一个更好更容易?

        <A>
            <180>20130218</180>  ///180 is here
            <170>5</170>
            <220>20080210</220>
            <730 CLID='AAA' KW='BBB' KW2='INTERNATIONAL'>
                <731>BBB INTERNATIONAL AG</731>
                <732>XXX</732>
                <735>US66</735>
                <734>YYY</734>
            </730>
            <300>
                <301>
                    <320>20071100</320>
                    <310>12345</310>
                </301>
                <330>US</330>
            </300>
        </A>
        <A>                    ///180 is not here
            <170>5</170>
            <220>20080210</220>
            <730 CLID='AAA' KW='BBB' KW2='WORLD'>
                <731>BBB INTERNATIONAL AG</731>
                <734>YYY</734>
            </730> …
Run Code Online (Sandbox Code Playgroud)

c# xml linq xpath xmlreader

-1
推荐指数
1
解决办法
340
查看次数

如何在 C# 中读取 XML 文档并将输出显示为字符串

考虑我的源文件看起来像这样。

        <Content xmlns="uuid:4522eb85-0a47-45f9-8e2b-1x82c78xx920">
            <first>Hello World.This is Fisrt field</first>
            <second>Hello World.This is second field</second>
   </Content>
Run Code Online (Sandbox Code Playgroud)

我想编写一段代码,从某个位置读取此 xml 文档并将其显示为字符串。

  say name of the xml file is helloworld.xml.
  Location: D:\abcd\cdef\all\helloworld.xml.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下操作,但我无法做到。

            XmlDocument contentxml = new XmlDocument();
            contentxml.LoadXml(@"D:\abcd\cdef\all\helloworld.xml");
            Response.Write("<BR>" + contentxml.ToString());
Run Code Online (Sandbox Code Playgroud)

Response.write 不显示任何内容。如果我错过了什么,请纠正我。它没有创建任何组件并且错误即将到来。

我也尝试过这个,

            XmlDocument contentxml = new XmlDocument();
            try
            {
                 contentxml.LoadXml(@"D:\abcd\cdef\all\helloworld.xml");
             }
            catch (XmlException exp)
            {
                Console.WriteLine(exp.Message);
            }
            StringWriter sw = new StringWriter();
            XmlTextWriter xw = new XmlTextWriter(sw);
            contentxml.WriteTo(xw);
            Response.Write("<BR>" + sw.ToString());
Run Code Online (Sandbox Code Playgroud)

但我没有找到任何输出。

我想从某个位置读取 XML 文件并将其显示为字符串。

任何人都可以帮忙解决这个问题吗?

谢谢你,穆齐米尔。

c# asp.net xmldocument xmlreader

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