xmlreader - 表示提供对XML数据的快速,非缓存,仅向前访问的阅读器。
如果标签之间不存在空格,C# XmlReader 将忽略标签
我有一个 XML 文件,所有 XML 都在一行,如下所示: CSX 亚特兰大赛区阿布维尔分队 阿布维尔分区从塔克开始......
我正在使用 XmlReader 浏览相对较大的 Xml (10Gb+)。假设 Xml 在深度 1 上具有以下节点名称 第一章 第二章 第三章 ... 使用 Xmlreader 时我正在阅读...
我在 C# 中使用 XMLReader 来读取每个 acctNum 的值,但问题是它会跳过记录。 它将跳过第一条记录,然后读取第二条记录,然后跳过第三条记录,然后读取第四条记录,依此类推。 我在 C# 中使用 XMLReader 来读取每个 acctNum 的值,但问题是它会跳过记录。 它将跳过第一条记录,然后读取第二条记录,然后跳过第三条记录,然后读取第四条记录,依此类推。 <acc><acctNum>123</acctNum></acc> <acc><acctNum>456</acctNum></acc> <acc><acctNum>789</acctNum></acc> 如何从上面的 XML 中读取所有 acctNum 的值? 在父节点上选择SingleNode,并循环思考子节点 Example: <root> <acc><acctNum>123</acctNum></acc> ... </root> for each child in XmlDoc.SelectSingleNode("//root").Childs child.SelectSingleNode("acc/acctNum").InnerText end (XPath 可能是错误的,但不是问题...)
来自 System.Xml.XmlReader(C# 和 .Net)的当前行号
有谁知道如何获取 System.Xml.XmlReader 的当前行号?我正在尝试记录在文件中找到 Xml 元素的位置。
现在如何使用XMLReaderFactory?因为这已被弃用
我正在尝试使用 XMLReaderFactory,但这已被弃用。 现在,我如何创建 XMLReader 的实例?
这些天我正在处理巨大的嵌套 XML 文件(>20k 行,最多 30 个子树/子树),我想知道是否有任何工具或插件可以向我显示 XML 文件的结构互动...
我有以下 XML 文件,该文件相当大,我无法让 simplexml 打开并读取该文件,所以我尝试 XMLReader 但在 php 中没有成功 我有以下 XML 文件,该文件相当大,我无法使用 simplexml 打开和读取该文件,所以我尝试使用 XMLReader,但在 php 中没有成功 <?xml version="1.0" encoding="ISO-8859-1"?> <products> <last_updated>2009-11-30 13:52:40</last_updated> <product> <element_1>foo</element_1> <element_2>foo</element_2> <element_3>foo</element_3> <element_4>foo</element_4> </product> <product> <element_1>bar</element_1> <element_2>bar</element_2> <element_3>bar</element_3> <element_4>bar</element_4> </product> </products> 不幸的是,我没有找到关于 PHP 的好的教程,并且很想看看如何将每个元素内容存储在数据库中。 这一切都取决于工作单元有多大,但我猜你正在尝试连续处理每个<product/>节点。 为此,最简单的方法是使用 XMLReader 获取每个节点,然后使用 SimpleXML 访问它们。这样,您可以保持较低的内存使用量,因为您一次处理一个节点,并且仍然可以利用 SimpleXML 的易用性。例如: $z = new XMLReader; $z->open('data.xml'); $doc = new DOMDocument; // move to the first <product /> node while ($z->read() && $z->name !== 'product'); // now that we're at the right depth, hop to the next <product/> until the end of the tree while ($z->name === 'product') { // either one should work //$node = new SimpleXMLElement($z->readOuterXML()); $node = simplexml_import_dom($doc->importNode($z->expand(), true)); // now you can use $node without going insane about parsing var_dump($node->element_1); // go to next <product /> $z->next('product'); } 快速概述不同方法的优缺点: 仅限 XMLReader 优点:速度快,占用内存小 缺点:编写和调试非常困难,需要大量用户态代码来完成任何有用的事情。用户态代码速度慢且容易出错。另外,它还让您需要维护更多行代码 XMLReader + SimpleXML 优点:不占用太多内存(仅处理一个节点所需的内存),而且 SimpleXML 顾名思义,非常易于使用。 缺点:为每个节点创建 SimpleXMLElement 对象不是很快。您确实必须对其进行基准测试才能了解这对您来说是否是一个问题。不过,即使是一台普通的机器也能够每秒处理一千个节点。 XMLReader + DOM 优点:使用与 SimpleXML 一样多的内存,并且 XMLReader::expand() 比创建新的 SimpleXMLElement 更快。我希望可以使用 simplexml_import_dom() 但在这种情况下似乎不起作用 缺点:DOM 使用起来很烦人。它介于 XMLReader 和 SimpleXML 之间。不像 XMLReader 那样复杂和尴尬,但与使用 SimpleXML 相差甚远。 我的建议:使用 SimpleXML 编写原型,看看它是否适合您。如果性能至关重要,请尝试 DOM。尽可能远离 XMLReader。请记住,您编写的代码越多,引入错误或引入性能回归的可能性就越高。 对于使用属性格式化的 xml... 数据.xml: <building_data> <building address="some address" lat="28.902914" lng="-71.007235" /> <building address="some address" lat="48.892342" lng="-75.0423423" /> <building address="some address" lat="58.929753" lng="-79.1236987" /> </building_data> php代码: $reader = new XMLReader(); if (!$reader->open("data.xml")) { die("Failed to open 'data.xml'"); } while($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'building') { $address = $reader->getAttribute('address'); $latitude = $reader->getAttribute('lat'); $longitude = $reader->getAttribute('lng'); } $reader->close(); 我的 XML 解析生涯的大部分时间都花在从大量 XML (Amazon MWS) 中提取有用信息。因此,我的回答假设您只需要特定信息并且您知道它位于哪里。 我发现使用 XMLReader 最简单的方法是知道我想要从哪些标签中获取信息并使用它们。如果您了解 XML 的结构并且它有很多独特的标签,我发现使用第一种情况很容易。案例 2 和 3 只是向您展示如何针对更复杂的标签完成此操作。这是非常快的;我在 PHP 中最快的 XML 解析器是什么? 上讨论了速度 在进行这样的基于标签的解析时要记住的最重要的事情是使用 if ($myXML->nodeType == XMLReader::ELEMENT) {... - 它检查以确保我们只处理打开节点而不是空格或关闭节点或其他任何东西。 function parseMyXML ($xml) { //pass in an XML string $myXML = new XMLReader(); $myXML->xml($xml); while ($myXML->read()) { //start reading. if ($myXML->nodeType == XMLReader::ELEMENT) { //only opening tags. $tag = $myXML->name; //make $tag contain the name of the tag switch ($tag) { case 'Tag1': //this tag contains no child elements, only the content we need. And it's unique. $variable = $myXML->readInnerXML(); //now variable contains the contents of tag1 break; case 'Tag2': //this tag contains child elements, of which we only want one. while($myXML->read()) { //so we tell it to keep reading if ($myXML->nodeType == XMLReader::ELEMENT && $myXML->name === 'Amount') { // and when it finds the amount tag... $variable2 = $myXML->readInnerXML(); //...put it in $variable2. break; } } break; case 'Tag3': //tag3 also has children, which are not unique, but we need two of the children this time. while($myXML->read()) { if ($myXML->nodeType == XMLReader::ELEMENT && $myXML->name === 'Amount') { $variable3 = $myXML->readInnerXML(); break; } else if ($myXML->nodeType == XMLReader::ELEMENT && $myXML->name === 'Currency') { $variable4 = $myXML->readInnerXML(); break; } } break; } } } $myXML->close(); } 接受的答案给了我一个良好的开端,但带来了比我想要的更多的课程和更多的处理;所以这是我的解释: $xml_reader = new XMLReader; $xml_reader->open($feed_url); // move the pointer to the first product while ($xml_reader->read() && $xml_reader->name != 'product'); // loop through the products while ($xml_reader->name == 'product') { // load the current xml element into simplexml and we’re off and running! $xml = simplexml_load_string($xml_reader->readOuterXML()); // now you can use your simpleXML object ($xml). echo $xml->element_1; // move the pointer to the next product $xml_reader->next('product'); } // don’t forget to close the file $xml_reader->close(); Simple example: public function productsAction() { $saveFileName = 'ceneo.xml'; $filename = $this->path . $saveFileName; if(file_exists($filename)) { $reader = new XMLReader(); $reader->open($filename); $countElements = 0; while($reader->read()) { if($reader->nodeType == XMLReader::ELEMENT) { $nodeName = $reader->name; } if($reader->nodeType == XMLReader::TEXT && !empty($nodeName)) { switch ($nodeName) { case 'id': var_dump($reader->value); break; } } if($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == 'offer') { $countElements++; } } $reader->close(); exit(print('<pre>') . var_dump($countElements)); } } XMLReader 在 PHP 站点 上有详细记录。这是一个 XML Pull 解析器,这意味着它用于迭代给定 XML 文档的节点(或 DOM 节点)。例如,您可以像这样浏览您提供的整个文档: <?php $reader = new XMLReader(); if (!$reader->open("data.xml")) { die("Failed to open 'data.xml'"); } while($reader->read()) { $node = $reader->expand(); // process $node... } $reader->close(); ?> 然后由您决定如何处理 XMLReader::expand()返回的节点。 试试这个 https://pear.php.net/package/XML_Serializer/docs/latest/XML_Serializer/XML_Unserializer.html 缺点:它占用大量内存。 优点:它读取 XML 并将其转换为多维数组。再简单不过了:) 这对我来说效果更好更快 <html> <head> <script> function showRSS(str) { if (str.length==0) { document.getElementById("rssOutput").innerHTML=""; return; } if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (this.readyState==4 && this.status==200) { document.getElementById("rssOutput").innerHTML=this.responseText; } } xmlhttp.open("GET","getrss.php?q="+str,true); xmlhttp.send(); } </script> </head> <body> <form> <select onchange="showRSS(this.value)"> <option value="">Select an RSS-feed:</option> <option value="Google">Google News</option> <option value="ZDN">ZDNet News</option> <option value="job">Job</option> </select> </form> <br> <div id="rssOutput">RSS-feed will be listed here...</div> </body> </html> **后端文件** <?php //get the q parameter from URL $q=$_GET["q"]; //find out which feed was selected if($q=="Google") { $xml=("http://news.google.com/news?ned=us&topic=h&output=rss"); } elseif($q=="ZDN") { $xml=("https://www.zdnet.com/news/rss.xml"); }elseif($q == "job"){ $xml=("https://ngcareers.com/feed"); } $xmlDoc = new DOMDocument(); $xmlDoc->load($xml); //get elements from "<channel>" $channel=$xmlDoc->getElementsByTagName('channel')->item(0); $channel_title = $channel->getElementsByTagName('title') ->item(0)->childNodes->item(0)->nodeValue; $channel_link = $channel->getElementsByTagName('link') ->item(0)->childNodes->item(0)->nodeValue; $channel_desc = $channel->getElementsByTagName('description') ->item(0)->childNodes->item(0)->nodeValue; //output elements from "<channel>" echo("<p><a href='" . $channel_link . "'>" . $channel_title . "</a>"); echo("<br>"); echo($channel_desc . "</p>"); //get and output "<item>" elements $x=$xmlDoc->getElementsByTagName('item'); $count = $x->length; // print_r( $x->item(0)->getElementsByTagName('title')->item(0)->nodeValue); // print_r( $x->item(0)->getElementsByTagName('link')->item(0)->nodeValue); // print_r( $x->item(0)->getElementsByTagName('description')->item(0)->nodeValue); // return; for ($i=0; $i <= $count; $i++) { //Title $item_title = $x->item(0)->getElementsByTagName('title')->item(0)->nodeValue; //Link $item_link = $x->item(0)->getElementsByTagName('link')->item(0)->nodeValue; //Description $item_desc = $x->item(0)->getElementsByTagName('description')->item(0)->nodeValue; //Category $item_cat = $x->item(0)->getElementsByTagName('category')->item(0)->nodeValue; echo ("<p>Title: <a href='" . $item_link . "'>" . $item_title . "</a>"); echo ("<br>"); echo ("Desc: ".$item_desc); echo ("<br>"); echo ("Category: ".$item_cat . "</p>"); } ?>
在 c# 中验证后无法从 Xmlreader 检索属性名称/值
我需要编写一段 C# 代码,以便在验证失败时从 XML 中提取属性信息。我下面的代码能够为我提供验证失败的确切属性,但我需要额外的
这是我的 XML 这是我的 XML <?xml version="1.0" encoding="utf-8"?> <Zones xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.keaneaustralia.com/Nts" xsi:schemaLocation="http://schemas.keaneaustralia.com/Nts Zones.xsd" version="1" major_version="434" minor_version="0" start_date="2023-07-09T00:00:00+10:00"> <Record long_desc="City Saver Zone"/> <Record logical="2" physical="1" short_desc="Zone 1" long_desc="Zone 1" is_city_saver="Yes" /> <Record logical="3" physical="2" short_desc="Zone 2" long_desc="Zone 2" is_city_saver="false" /> <Record logical="dt" physical="3" short_desc="Zone 3" long_desc="Zone 3" is_city_saver="false" /> <Record logical="5" physical="4" short_desc="Zone 4" long_desc="Zone 4" is_city_saver="false" /> <Record logical="6" physical="5" short_desc="Zone 5" long_desc="Zone 5" is_city_saver="false" /> </Zones> 这是我的XSD <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:tns="http://schemas.keaneaustralia.com/Nts" elementFormDefault="qualified" targetNamespace="http://schemas.keaneaustralia.com/Nts" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Zones" nillable="true" type="tns:ZoneCollection" /> <xs:complexType name="ZoneCollection"> <xs:complexContent mixed="false"> <xs:extension base="tns:DataElementOfZone" /> </xs:complexContent> </xs:complexType> <xs:complexType name="DataElementOfZone"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="Record" type="tns:Zone" /> </xs:sequence> <xs:attribute name="version" type="xs:int" use="required" /> <xs:attribute name="major_version" type="xs:int" use="required" /> <xs:attribute name="minor_version" type="xs:int" use="required" /> <xs:attribute name="start_date" type="xs:dateTime" use="required" /> <xs:attribute default="false" name="is_delta" type="xs:boolean" /> <xs:attribute default="0" name="delta_major_version" type="xs:int" /> <xs:attribute default="0" name="delta_minor_version" type="xs:int" /> </xs:complexType> <xs:complexType name="Zone"> <xs:attribute name="logical" type="xs:unsignedByte" use="required" /> <xs:attribute name="physical" type="xs:unsignedByte" use="required" /> <xs:attribute name="short_desc" type="xs:string" /> <xs:attribute name="long_desc" type="xs:string" /> <xs:attribute name="is_city_saver" type="xs:boolean" use="required" /> </xs:complexType> </xs:schema> 该文件正在通过验证,并且不会引发任何错误。当我检查调试模式时,attributeSchemaInfo 出现空引用异常。下面是验证 xml 的函数。它不会引发逻辑属性所需的异常和字段 is_city_saver 的类型错误,该字段只需要布尔值:true 和 false,而不是 yes 和 no。 private static bool ValidateXmlAgainstXsd(string xmlFilePath, string xsdFilePath, ILogger fileLogger) { try { int numErreur = 0; XmlSchemaSet schemaSet = new XmlSchemaSet(); schemaSet.Add(null, xsdFilePath); schemaSet.Compile(); XmlReaderSettings settings = new XmlReaderSettings(); settings.Schemas.Add(schemaSet); settings.ValidationType = ValidationType.Schema; settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings | XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationEventHandler += (sender, e) => { LogValidationError(xmlFilePath, e.Message, e.Exception, e.Exception.LineNumber, e.Exception.LinePosition, e.Severity, fileLogger, ref numErreur); }; using (XmlReader reader = XmlReader.Create(xmlFilePath, settings)) { while (reader.Read()) { //process code } } return numErreur > 0 ? false : true; } catch (Exception ex) { Console.WriteLine($"Error validating XML '{xmlFilePath}' against XSD '{xsdFilePath}': {ex.Message}"); return false; } } 我稍微修改了您的代码,并注释掉/删除了 LogValidationError() 调用。 XSD 验证正在运行!请看下面。 我的猜测是问题正是与注释掉的LogValidationError()有关。 c# void Main() { string xmlFilePath = @"e:\Temp\Zones.xml"; string xsdFilePath = @"e:\Temp\Zones.xsd"; ValidateXmlAgainstXsd(xmlFilePath, xsdFilePath); } private static bool ValidateXmlAgainstXsd(string xmlFilePath, string xsdFilePath) { try { int numErreur = 0; XmlSchemaSet schemaSet = new XmlSchemaSet(); schemaSet.Add(null, xsdFilePath); schemaSet.Compile(); XmlReaderSettings settings = new XmlReaderSettings(); settings.Schemas.Add(schemaSet); settings.ValidationType = ValidationType.Schema; settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings | XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationEventHandler += (sender, e) => { //LogValidationError(xmlFilePath, e.Message, e.Exception, e.Exception.LineNumber, e.Exception.LinePosition, e.Severity, fileLogger, ref numErreur); Console.WriteLine(e.Message); }; using (XmlReader reader = XmlReader.Create(xmlFilePath, settings)) { while (reader.Read()) { //process code } } return numErreur > 0 ? false : true; } catch (Exception ex) { Console.WriteLine($"Error validating XML '{xmlFilePath}' against XSD '{xsdFilePath}': {ex.Message}"); return false; } } 输出 The required attribute 'logical' is missing. The required attribute 'physical' is missing. The required attribute 'is_city_saver' is missing. The 'is_city_saver' attribute is invalid - The value 'Yes' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:boolean' - The string 'Yes' is not a valid Boolean value. The 'logical' attribute is invalid - The value 'dt' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:unsignedByte' - The string 'dt' is not a valid Byte value.
我一直在寻找这个问题的答案,但直到现在我还没有找到任何答案(我确信这很简单,为此我自己道歉)。 我正在尝试从类内部使用 XMLReader ...
我有一个 XML 文件的链接。 我是这样理解的: $xml = simplexml_load_file('http://example.com'); SimpleXMLElement {#1631 ▼ +“@attributes”:数组:1 [▶] +“商店”:
有人能帮我理解 IXmlSerializable 序列化从更旧版本的 .Net 开始的 double 以及现在如何正确执行它吗?
我正在移植部分 MathNet.Spatial 库以添加一些我需要的功能。我的项目以 .Net 7.0 为目标,该库以更旧的版本为目标,我在移植
我有一个非常大的 xml 文件,格式如下(这是两个部分的一个非常小的片段)。 我有一个非常大的 xml 文件,格式如下(这是其中两个部分的一个非常小的片段)。 <?xml version="1.0" standalone="yes"?> <LaunchBox> <Game> <Name>Violet</Name> <ReleaseYear>1985</ReleaseYear> <MaxPlayers>1</MaxPlayers> <Platform>ZiNc</Platform> </Game> <Game> <Name>Wishbringer</Name> <ReleaseYear>1985</ReleaseYear> <MaxPlayers>1</MaxPlayers> <Platform>ZiNc</Platform> </Game> <Platform> <Name>3DO Interactive Multiplayer</Name> <Emulated>true</Emulated> <ReleaseDate>1993-10-04T00:00:00-07:00</ReleaseDate> <Developer>The 3DO Company</Developer> </Platform> <Platform> <Name>Commodore Amiga</Name> <Emulated>true</Emulated> <ReleaseDate>1985-07-23T00:00:00-07:00</ReleaseDate> <Developer>Commodore International</Developer> </Platform> </LaunchBox> 我想快速找到所有父元素的实例(即上例中的Game和Platform)以计算它们并提取内容。 更复杂的是,Platform里面还有一个Game“孩子”(我不想算)。我只想要父母(即我不想要Game -> Platform但我只想要Platform. 结合本网站和谷歌,我得出了以下功能代码: $attributeCount = 0; $xml = new XMLReader(); $xml->open($xmlFile); $elements = new \XMLElementIterator($xml, $sectionNameWereGetting); // $sectionNameWereGetting is a variable that changes to Game and Platform etc foreach( $elements as $key => $indElement ){ if ($xml->nodeType == XMLReader::ELEMENT && $xml->name == $sectionNameWereGetting) { $parseElement = new SimpleXMLElement($xml->readOuterXML()); // NOW I CAN COUNT IF THE ELEMENT HAS CHILDREN $thisCount = $parseElement->count(); unset($parseElement); if ($thisCount == 0){ // IF THERE'S NO CHILDREN THEN SKIP THIS ELEMENT continue; } // IF THERE IS CHILDREN THEN INCREMENT THE COUNT // - IN ANOTHER FUNCTION I GRAB THE CONTENTS HERE // - AND PUT THEM IN THE DATABASE $attributeCount++; } } unset($elements); $xml->close(); unset($xml); return $attributeCount; 我正在使用 Hakre 的优秀脚本 https://github.com/hakre/XMLReaderIterator/blob/master/src/XMLElementIterator.php 这确实有效。但我认为分配一个新的 SimpleXMLElement 会减慢操作速度。 我只需要 SimpleXMLElement 来检查元素是否有子元素(我用它来确定元素是否在另一个父元素中 - 即如果它是父元素,它“将”有子元素,所以我想计算它但是,如果它在另一个父母里面那么它不会有孩子,我想忽略它)。 但也许有比数孩子更好的解决方案?即$xml->isParent()函数之类的? 当前函数在完全统计xml的所有部分之前超时(大约有8个不同的部分,其中一些有几十万条记录)。 我怎样才能让这个过程更有效率,因为我也在使用类似的代码来获取主要部分的内容并将它们放入数据库中,这样它就会尽可能高效地支付红利。 另外值得注意的是,我不是特别擅长编程,所以请随时指出我可能犯的其他错误,以便我改进。 听起来使用 xpath 而不是遍历 XML 可能适用于您的用例。使用 xpath,您可以选择所需的特定节点: $xml = simplexml_load_string($xmlStr); $games = $xml->xpath('/LaunchBox/Game'); echo count($games).' games'.PHP_EOL; foreach ($games as $game) { print_r($game); } https://3v4l.org/bLLEi#v8.2.3 您无需序列化 XML 即可将其加载到 DOM 或 SimpleXML 中。你可以扩展成 DOM 文档: $reader = new XMLReader(); $reader->open(getXMLDataURL()); $document = new DOMDocument(); // navigate using read()/next() while ($found) { // expand into DOM $node = $reader->expand($document); // import DOM into SimpleXML $simpleXMLObject = simplexml_import_dom($node); // navigate using read()/next() } 但是,只需对 XMLReader:read() 和 XMLReader:next() 进行正确的调用,就可以计算文档元素的元素子元素。 read() 将导航到包含后代的以下节点,而 next() 将导航到以下同级节点 - 忽略后代。 $reader = new XMLReader(); $reader->open(getXMLDataURL()); $document = new DOMDocument(); $xpath = new DOMXpath($document); $found = false; // look for the document element do { $found = $found ? $reader->next() : $reader->read(); } while ( $found && $reader->localName !== 'LaunchBox' ); // go to first child of the document element if ($found) { $found = $reader->read(); } $counts = []; while ($found) { if ($reader->nodeType === XMLReader::ELEMENT) { if (isset($counts[$reader->localName])) { $counts[$reader->localName]++; } else { $counts[$reader->localName] = 1; } } // go to next sibling node $found = $reader->next(); } var_dump($counts); function getXMLDataURL() { $xml = <<<'XML' <?xml version="1.0" standalone="yes"?> <LaunchBox> <Game> <Name>Violet</Name> <ReleaseYear>1985</ReleaseYear> <MaxPlayers>1</MaxPlayers> <Platform>ZiNc</Platform> </Game> <Game> <Name>Wishbringer</Name> <ReleaseYear>1985</ReleaseYear> <MaxPlayers>1</MaxPlayers> <Platform>ZiNc</Platform> </Game> <Platform> <Name>3DO Interactive Multiplayer</Name> <Emulated>true</Emulated> <ReleaseDate>1993-10-04T00:00:00-07:00</ReleaseDate> <Developer>The 3DO Company</Developer> </Platform> <Platform> <Name>Commodore Amiga</Name> <Emulated>true</Emulated> <ReleaseDate>1985-07-23T00:00:00-07:00</ReleaseDate> <Developer>Commodore International</Developer> </Platform> </LaunchBox> XML; return 'data:application/xml;base64,'.base64_encode($xml); } 输出: array(2) { ["Game"]=> int(2) ["Platform"]=> int(2) }
我有一个函数,它可以把一个列表中所有对象的信息写入一个XML文件中。 public static void UpdateXML() { XmlWriterSettings settings = new ...
我正在使用Atom10FeedFormatter类来处理调用OData Rest API端点的原子xml提要。它工作正常,但如果Feed中有200多个条目,则api会使结果变慢。 ...
我正在使用XmlSeriazlier反序列化xml文件。 var serializer = new XmlSerializer(typeof(T));使用(var reader = document.CreateReader())var result =(T)serializer.Deserialize(reader); Xml ...