我想做类似的事情:
stringBuilder.AppendLine(" globalVar." + reader.GetAttribute(i).Name + " = " + reader[i] + "; //add param ");
Run Code Online (Sandbox Code Playgroud)
其中“ reader.GetAttribute(i).Name ”是不起作用的组件。是否有等效的方法来获取属性的名称?
我已经设置了xmlReader并且可以检查某些元素,但是我找不到检查关闭元素的方法,让我说</perls>除了它的开放之外我还想要另外一个case语句,我怎么能这样做?我确信这样的标签不是自动关闭的.
using (XmlReader reader = XmlReader.Create("perls.xml"))
{
while (reader.Read())
{
// Only detect start elements.
if (reader.IsStartElement())
{
// Get element name and switch on it.
switch (reader.Name)
{
case "perls":
// Detect this element.
Console.WriteLine("Start <perls> element.");
break;
case "article":
// Detect this article element.
Console.WriteLine("Start <article> element.");
// Search for the attribute name on this current node.
string attribute = reader["name"];
if (attribute != null)
{
Console.WriteLine(" Has attribute name: " + attribute);
}
// Next …Run Code Online (Sandbox Code Playgroud) 我想读取一个 xml 字符串而忽略标题和注释。
忽略评论很简单,我在这里找到了解决方案。但我没有找到任何解决方案来忽略标题。
让我举个例子吧:
考虑这个xml:
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Some comments -->
<Tag Attribute="3">
...
</Tag>
Run Code Online (Sandbox Code Playgroud)
我想将 xml 读取到一个字符串中,只获取元素“标签”和其他元素,但没有“xml 版本”和注释。
元素“标签”只是一个例子。可能存在许多其他人。
所以,我只想要这个:
<Tag Attribute="3">
...
</Tag>
Run Code Online (Sandbox Code Playgroud)
我到目前为止的代码:
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Some comments -->
<Tag Attribute="3">
...
</Tag>
Run Code Online (Sandbox Code Playgroud)
我没有在 XmlReaderSettings 上找到任何东西来做到这一点。
我是否需要逐个节点地选择我想要的节点?这个设置不存在?
编辑 1: 只是为了恢复我的问题。我需要在 WebService 的 CDATA 中使用 xml 的内容。当我发送评论或 xml 版本时,我收到了 xml 部分的特定错误。所以我假设当我阅读没有版本、标题和评论的 xml 时,我会很高兴。
我有一个包含以下 XML 内容的 XML-Stream:
<WebError Key="A">
<Message>B</Message>
<Parameters>
<Parameter name="C">D</Parameter>
</Parameters>
</WebError>
Run Code Online (Sandbox Code Playgroud)
我找不到XmlReader读取Key属性的方法,所以reader.NodeTypeisXmlNodeType.Attribute和reader.LocalNameis "Key"。
这就是我初始化我的方式XmlReader:
XmlReader.Create(stream, new XmlReaderSettings { CloseInput = true, IgnoreWhitespace = true });
Run Code Online (Sandbox Code Playgroud)
这个读取器然后通过几个方法级别,直到它到达我的解析器函数。
这是我试图让读者阅读该元素的所有替代代码。从代码中剥离了控制结构,因此您只能看到实际调用的函数。
第一次尝试,通过MoveToFirstAttribute()调用移动到属性:
reader.Read(); // true
reader.IsStartElement("WebError"); // true
using (var nodeReader = reader.ReadSubtree()) {
nodeReader.HasAttributes; // true
nodeReader.MoveToFirstAttribute(); // false
nodeReader.Read(); // true
nodeReader.NodeType; // XmlNodeType.Element
nodeReader.LocalName; // "WebError"
using (var subLevelReader = nodeReader.ReadSubtree()) {
}
nodeReader.Read(); // …Run Code Online (Sandbox Code Playgroud) 我正在尝试查询一些非常大的 XML 文件(最多几个演出),检查它们的格式是否正确,然后将它们写入硬盘。看起来很容易,但由于它们太大了,我无法在内存中保存整个文档。因此,我的问题是: 当可用 RAM 少于一个文档的大小时,如何读取、检查和写入大型 XML 文件?
我的方法:使用 XMLReader 逐个读取它(如果成功,文档必须格式良好)并使用 XMLWriter 进行写入。问题:XMLWriter 似乎将所有内容都存储在 RAM 中,直到文档完成。DOM Documents 和 SimpleXML 似乎做同样的事情。还有什么我可以尝试的吗?
我想使用 XMLReader 解析一个 XML 文档。我有一个带有所有常量的案例开关。但是,如果标签是自关闭的 XMLReader 只触发 ELEMENT,而不是像预期的那样触发 ELEMENT 和 END_ELEMENT。
通过类属性 $isEmptyElement 进行检测也不起作用,因为该标记具有属性。
因此我的问题是:如何在 PHP 中使用 XMLReader 检测自关闭的 XML 标记?
相关但没有解决方案: XmlReader - 自关闭元素不会触发 EndElement 事件?
示例节点:
<mynode name="somenamestring" code="intstring" option="intstring3"/>
Run Code Online (Sandbox Code Playgroud)
我的代码:
$xmlReader->open($url,NULL);
$xmlWriter = new XMLWriter();
$xmlWriter->openMemory();
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->setIndent(true);
$xmlWriter->setIndentString(' ');
while ($xmlReader->read()) {
switch ($xmlReader->nodeType) {
case 1: #element
$xmlWriter->startElement($xmlReader->name);
if ($xmlReader->hasAttributes) {
while ($xmlReader->moveToNextAttribute()) {
$xmlWriter->writeAttribute($xmlReader->name,$xmlReader->value);
}
}
if ($xmlReader->isEmptyElement) {
$xmlWriter->endElement();
}
break;
case 3: #text
$xmlWriter->text($xmlReader->value);
break;
case 4: #cdata
$xmlWriter->writeCData($xmlReader->value);
break; …Run Code Online (Sandbox Code Playgroud) 我正在编写一个用于数据后处理的 Windows 窗体应用程序。我有一个面板,允许拖放文件。XML 文件将非常大(足以减慢 UI 的速度)。因此我想异步读取文件。到目前为止,对于应用程序的这一部分,我有两种方法:
namespace myApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void DragDropPanel_DragEnter(object sender, DragEventArgs e)
{
// Trigger the Drag Drop Event
e.Effect = DragDropEffects.Copy;
}
private async void DragDropPanel_DragDrop(object sender, DarEventArgs e)
{
// Identifiers used are:
string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
string filePath = filePaths[0],
fileName = System.IO.Path.GetFileName(filePath);
// Read in the file asynchronously
XmlReader reader = XmlReader.Create(filePath);
//reader.Settings.Async = true; // ** (SECOND ERROR) ** \\ …Run Code Online (Sandbox Code Playgroud) 在使用XMLReader方法解析XML文件时,如何获取元素的父节点?
$xml = new XMLReader();
$xml->XML($xmlString);
while($xml->read())
{
$xml->localName; // gives tag name
$xml->value; // gives tag value
// how do I access the parent of this element
}
Run Code Online (Sandbox Code Playgroud) 我的xml文件有这样的东西:
那么如何递归获取属性的所有值并将它们添加到或.也许是一个foreach循环?
...
<Keyword name = "if" />
<Keyword name = "else" />
<Keyword name = "is" />
...nameList<string>string[]
我跟着codemeit,我不断收到错误:Data at the root level is invalid. Line 1, position 1.我的xml文件是
<KeyWords>
...
<KeyWord name = "if" />
...
</KeyWord>
新问题,The '\' character, hexadecimal value 0x5C, cannot be included in a name.但相同的文件.
我无法让Ext.data.XmlReader的CDATA字段映射生效.
<script>
var store = new Ext.data.Store({
url: '../data/data.xml',
// specify a XmlReader
reader: new Ext.data.XmlReader({
record: 'entry',
fields:[
{ name: 'field1', type: 'date', mapping:'field1'},
{ name: 'field2', type: 'string', mapping:'field2'}
]
}),
listeners:{load:function(store,recs)
{ //alert row1.field1 and row1.field2
var s = 'field1 = '+recs[0].get('field1') + '\nfield2 = '+recs[0].get('field2');
alert(s);
}
}
});
store.load();
</script>
Run Code Online (Sandbox Code Playgroud)
这是data.xml中的XML内容:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<entry>
<field1>01/01/2006</field1>
<field2>
<![CDATA[
<Comment>
Test
</Comment>
]]>
</field2>
</entry>
</feed>
Run Code Online (Sandbox Code Playgroud)
当商店完成装货.警报(来自监听器)显示如下内容:
field1 = Sun Jan 01 2006 00:00:00 …Run Code Online (Sandbox Code Playgroud) xmlreader ×10
c# ×6
xml ×6
php ×3
asynchronous ×1
extjs ×1
grid ×1
javascript ×1
libxml2 ×1
parsing ×1
record ×1
xmldocument ×1
xmlwriter ×1