我刚安装IE10在我的Windows 7,而且我发现,即使我很高兴,从AJAX请求个XML现在可以兼容DOM文档,就像一个相当基本的功能document.evaluate是仍然不支持.
更糟糕的是,由于这些个XML是不是定制的微软IXMLDocument对象,节点不支持selectNodes和selectSingleNode了.最后,似乎IE10不支持DOM Level 3 XPath或MSXML Xpath.
说真的,微软?有什么我想念的吗?
当然,我可以使用querySelector和querySelectorAll,但我不想失去相当多的向后兼容性.
否则,仍然可以使用此行请求MSXML文档
try {xhr.responseType = "msxml-document";} catch(e) {}
Run Code Online (Sandbox Code Playgroud)
如规定在这里,但我认为这将是很好对付,最后,在IE标准DOM文档了.
那么,有没有办法在IE10中使用带有标准DOM文档的XPath?
更新2013年6月26日 IE11尚未稳定,但仍然不支持document.evaluate.如果它不支持它在稳定的版本,我怀疑它会永远支持它.毋庸置疑,这是荒谬的.
我知道你可以在DOM节点中使用querySelector/ All,但它在IE9及更低版本中不受支持,这仍然是非常常用的,无论如何XPath比选择器更强大.
幸运的是(如果可以这么说),你仍然可以设置xhr.responseType = "msxml-document".有那么一刻,我担心你再也不能那样做了......
更新23/11/2013 IE11现在稳定,但遗憾的是,它不支持document.evaluate.随着重量级XML文档在Web应用程序中越来越少地使用JSON或其他光表示法格式,这变得不那么成问题了,但仍然如此.
设置responseType属性仍然提供遗留的XML文档,所以我猜没有丢失.不过,我不知道IE12是否会成立.
更新15/8/2015现在听起来很荒谬,但Edge现在支持document.evaluate.就在(几乎)一切都切换到JSON进行数据交换时.嗯,迟到总比没有好,我想.
如何删除一个的所有子节点XmlElement,但保留所有属性?
请注意,XmlElement.RemoveAll还会删除所有属性.什么是干净,优雅和良好的删除所有子节点的方法?换句话说,这里最好的做法是什么?
我正在尝试学习XML,我知道这是一个没有正确导入节点的问题.但我无法弄明白.我一直在环顾四周,大多数人都没有多个子元素,就像我对部门一样.
这是我的XML结构:
<SOT>
<DEPARTMENT name="Aviation Technology" id="AT">
<EMPLOYEE type="Faculty">
<LOGIN>jdoe1</LOGIN>
<NAME>John Doe</NAME>
</EMPLOYEE>
<EMPLOYEE type="Faculty">
<LOGIN>jdoe2</LOGIN>
<NAME>Jane Doe</NAME>
</EMPLOYEE>
<EMPLOYEE type="Faculty">
<LOGIN>jdoe3</LOGIN>
<NAME>Joe Doe</NAME>
</EMPLOYEE>
</DEPARTMENT>
<DEPARTMENT name="Building and Construction Management" id="BCM">
</DEPARTMENT>
<DEPARTMENT name="Computer Graphics Technology" id="CGT">
</DEPARTMENT>
</SOT>
Run Code Online (Sandbox Code Playgroud)
我知道SOT是我的根本元素,部门是SOT的"孩子",每个部门都有多个员工"孩子".我遇到的问题是当我试图将新员工添加到某个部门时.当我尝试时,$departmentArray->item($i)->appendChild($employee);我得到错误的文档错误.
我正在使用此PHP代码尝试将子项附加到departmentNode
<?php
//grab form data
$username = $_POST['username'];
$employeeName = $_POST['employeeName'];
$department = $_POST['department'];
//create new DOMDocument to hold current XML data
$doc = new DOMDocument();
$doc->load("test.xml");
$xpath = new DOMXpath($doc);
//create our new DOMDocument for combining …Run Code Online (Sandbox Code Playgroud) 我试图从IXMLDocument中获取xml文本.
Doc.XML.Text;
Run Code Online (Sandbox Code Playgroud)
这给了我xml文本,但它包含了xml声明.
<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)
有没有办法可以获取xml文本,不包括xml声明.我总是可以自己从字符串结果中手动删除它,但我觉得应该有属性或我可以在文档上设置的东西来排除xml声明.
例
Doc.XML.Text输出
<?xml version="1.0"?>
<Certificates>
<Certificate>
</Certificate>
</Certificates>
Run Code Online (Sandbox Code Playgroud) 我正在使用节点模块xmldom。但是,它总是会打印出大量警告和错误,如下所示:
@#[line:484,col:1]
[xmldom warning] attribute "hidden" missed quot(")!!
@#[line:517,col:1]
[xmldom warning] unclosed xml attribute
@#[line:517,col:1]
[xmldom warning] unclosed xml attribute
@#[line:518,col:1]
[xmldom warning] attribute "center" missed quot(")!!
@#[line:522,col:1]
[xmldom warning] attribute "6" missed quot(")!!
Run Code Online (Sandbox Code Playgroud)
我不知道如何来明确地沉默所有那些警告和错误而不触及节点或自己的package.json?
我有一个XML文件,其中有一个被注释掉的节点.我使用语法创建了这个节点 -
relTableCommentedNode = xDoc.CreateNode(XmlNodeType.Comment,"RELTABLECOMMENTED","np");
取消注释此节点的最佳方法是什么?我可以根据用于创建节点的名称(RELTABLECOMMENTED)来识别此节点吗?
这是注释节点
<!--<reltable toc="no" class="- map/reltable ">
<relheader class="- map/relheader ">
<relcolspec type="concept" class="- map/relcolspec ">
</relheader>
<relrow class="- map/relrow ">
<relcell class="- map/relcell ">
<topicref href="concepts\about_cannedgoods.dita" copy-to="concepts\about_cannedgoods.dita" class="- map/topicref " xmlns:dctm="http://www.documentum.com">
</topicref>
</relcell>
</relrow>
</reltable> -->
我想知道该xercesxmldom单元作为XML DOM实现之一发生了什么.
它似乎在Delphi XE中消失了.
为什么?
(我搜索了文档;找不到关于xercesxmldom消失的任何相关信息).
编辑:这些是我存档的来源:
R:\>dir /s /b xercesxmldom.pas
R:\D2006-Enterprise-D10-BDS-4.0\source\Win32\xml\xercesxmldom.pas
R:\D2007-Enterprise-D11-RadStudio-5.0\source\Win32\xml\xercesxmldom.pas
R:\D2009-Enterprise-D12-RadStudio-6.0\source\Win32\xml\xercesxmldom.pas
R:\D2010-Enterprise-D14-RadStudio-7.0\source\Win32\xml\xercesxmldom.pas
R:\D7.01.Architect\Source\Xml\xercesxmldom.pas
Run Code Online (Sandbox Code Playgroud)
R:\DXE-Enterprise-D15-RadStudio-8.0源树中没有任何内容......
--jeroen
我正在尝试编写一个vbscript来自动配置存储阵列.我在确定如何最好地导航XML方面遇到了一些困难.
我的XML的示例部分:
<SERVER>
<INTERFACE>
<PORT>0</PORT>
<IPADDRESS>192.168.1.1</IPADDRESS>
<NETMASK>255.255.255.0</NETMASK>
</INTERFACE>
<INTERFACE>
<PORT>1</PORT>
<IPADDRESS>192.168.1.2</IPADDRESS>
<NETMASK>255.255.255.0</NETMASK>
</INTERFACE>
</SERVER>
Run Code Online (Sandbox Code Playgroud)
所以我想迭代每个接口(实际上有5个)并在正确的接口上设置适当的IP和网络掩码.
我现在正在这样做:
Set objXMLDoc = CreateObject("Microsoft.XMLDOM")
objXMLDoc.async = False
objXMLDoc.load("example.xml")
Set Root = objXMLDoc.documentElement
Set NodeList = Root.getElementsByTagName("interface")
port = 0
For Each Elem In NodeList
WScript.Echo "Port " & port & " has IP address of " & Elem.text
port = port + 1
Next
Run Code Online (Sandbox Code Playgroud)
但是必须有一个更干净的方法来做这个,我可以选择接口部分并读入端口,ipaddress和netmask,发出命令,然后进入下一个界面?
谢谢.
我需要使用JavaScript加载和读取XML文件.
以下代码在Firefox,IE和Opera中运行良好:
function loadXMLDoc(dname) {
var xmlDoc
// Internet Explorer
try {
xmlDoc = new ActiveXObject('Microsoft.XMLDOM')
}
catch (e) {
// Firefox, Opera, etc.
try {
xmlDoc = document.implementation.createDocument('', '', null)
}
catch (e) {
alert(e.message)
}
}
try {
xmlDoc.async = false
xmlDoc.load(dname)
return xmlDoc
}
catch (e) {
alert(e.message)
}
return null
}
Run Code Online (Sandbox Code Playgroud)
但是在Chrome中执行此代码会给我带来以下错误:
对象#没有方法"加载"
我必须从Oracle的某些表中生成PL/SQL中的XML文档.我之前从未这样做过,我发现似乎有几种主要方法可以做到:
有65个表将被引用以生成单个文档,我将不得不针对xsd验证输出.这些文件将以批量生成(而不是按需生成) - 我不知道这是否有所作为.使用Oracle 10g.
我最初倾向于使用xmldom包,因为它看起来更灵活,但我无法找到它的好例子或文档,而xml函数似乎更好地记录并且通常更受欢迎.是否有一个原因?
人们通常会为这类任务推荐什么方法?