xml-namespaces 相关问题

根据该标准,“XML名称空间提供了一种简单的方法,用于通过将它们与URI引用标识的名称空间相关联来限定可扩展标记语言文档中使用的元素和属性名称。”

具有 3 个不同名称空间且无前缀的 XML 模式

我需要生成一个架构,该架构将生成具有 3 个不同名称空间的 XML 输出,但不应有任何前缀用于引用元素或名称空间。更具体地说,...

回答 1 投票 0

通过 DOMParser SVG 命名空间将 SVG 字符串渲染到 DOM

我试图从字符串中解析 SVG 元素并将其渲染到 DOM 中,但是当我解析为 image/svg+xml 时, 以某种奇怪的方式附加到 DOM 中,但不会渲染它。 .

回答 2 投票 0

如何将 XML 反序列化为 C# 对象而忽略 xmlns?

给定以下 XML,我如何将它们反序列化为同一个 C# 对象?版本 1.1 本质上向后兼容 1.0,所以我并不真正关心 xmlns 值,但 C# 不这么认为...

回答 1 投票 0

XML 命名空间默认值与命名空间前缀

我的同事为有效负载中的每个元素提供了一个命名空间 ns0 以实现最佳实践,但我的解析器停止了工作。阅读有关该主题的更多内容,似乎声明每个元素的名称空间是......

回答 1 投票 0

WPF - 全局添加 xaml 命名空间声明

我有一个相当庞大的 WPF 应用程序,其中包含大量 XAML 文件。每个 XAML 文件都有 5 到 10 个 clr 到 xml 命名空间映射 xmlns:abc="clr-namespace:Abcdef"。它看起来很糟糕并且很痛苦

回答 2 投票 0

如何在 XML selectNodes 和 selectSingleNode 中使用命名空间

我正在将 VBA Access 应用程序从 Win7 移植到 Win11,我认为应该有一种方法可以做得更优雅。我必须阅读这个 .xml 文件: 我正在将 VBA Access 应用程序从 Win7 移植到 Win11,我认为应该有一种方法可以做得更优雅。我必须阅读这个 .xml 文件: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Document xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08 camt.053.001.08.xsd" xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <BkToCstmrStmt> <GrpHdr> <MsgId>MSG-C053-231229020607-01</MsgId> <CreDtTm>2023-12-29T14:06:07.386+01:00</CreDtTm> <AddtlInf>RECONSTRUCTION</AddtlInf> </GrpHdr> <Stmt> <Id>STM-C053-231229020607-01</Id> <ElctrncSeqNb>999999</ElctrncSeqNb> <CreDtTm>2023-12-29T14:06:07.386+01:00</CreDtTm> <FrToDt> <FrDtTm>2023-11-29T00:00:00.000+01:00</FrDtTm> <ToDtTm>2023-12-28T23:59:59.999+01:00</ToDtTm> </FrToDt> <CpyDplctInd>DUPL</CpyDplctInd> <Acct> <Id> <IBAN>CHxxxxxxxxxxxxxxxxx</IBAN> </Id> <Ccy>CHF</Ccy> <Ownr> <Nm>Entity</Nm> </Ownr> <Svcr> <FinInstnId> <Nm>Name of Bank</Nm> </FinInstnId> </Svcr> </Acct> <Bal> <Shortened> </Shortened> </Bal> <Bal> <Shortened> </Shortened> </Bal> <Ntry> <Shortened> </Shortened> </Ntry> </Stmt> </BkToCstmrStmt> </Document> 在Win7中使用\Windows\system32\msxml6.dll,这段代码做得很完美: Sub ReadCamt053(strDPFE As String) Dim bankDownload As MSXML2.DOMDocument Set bankDownload = New MSXML2.DOMDocument bankDownload.validateOnParse = True bankDownload.Load strDPFE Dim groupHeader As IXMLDOMNode For Each groupHeader In bankDownload.selectNodes("Document/BkToCstmrStmt/GrpHdr") Debug.Print "Erzeugungsdatum(CreDtTm)", groupHeader.selectSingleNode("CreDtTm").Text Next groupHeader Dim accountStatement As IXMLDOMNode For Each accountStatement In bankDownload.selectNodes("Document/BkToCstmrStmt/Stmt") gIBAN = accountStatement.selectSingleNode("Acct/Id/IBAN").Text gSequenzNr = accountStatement.selectSingleNode("ElctrncSeqNb").Text ReadStatementEntries accountStatement.selectNodes("Ntry") Next accountStatement End Sub 对于Win11 \Windows\SysWOW64\msxml6.dll 的移植,选择了XML,这需要使用DOMDocument60 而不是DOMDocument。使用 Google,我从 MS 找到了 this,并假设我必须添加一个命名空间才能读取 XML。我这样做了,但我无法找到一种优雅的方式来添加 groupHeader.selectSingleNode("CreDtTm").Text 的名称空间 - groupHeader.selectSingleNode("/ns:CreDtTm").Text 导致错误 91,使用 groupHeader.selectSingleNode("/bk:Document/bk:BkToCstmrStmt/bk:GrpHdr/bk:CreDtTm").Text 有效,但似乎很难阅读...... Sub ReadCamt053(strDPFE As String) Dim bankDownload As MSXML2.DOMDocument60 Set bankDownload = New MSXML2.DOMDocument60 bankDownload.validateOnParse = True bankDownload.SetProperty "SelectionNamespaces", "xmlns:ns='urn:iso:std:iso:20022:tech:xsd:camt.053.001.08'" bankDownload.Load strDPFE Dim groupHeader As IXMLDOMNode For Each groupHeader In bankDownload.selectNodes("/ns:Document/ns:BkToCstmrStmt/ns:GrpHdr") Debug.Print "Erzeugungsdatum(CreDtTm)", groupHeader.selectSingleNode("CreDtTm").Text '<--- Next groupHeader Dim accountStatement As IXMLDOMNode For Each accountStatement In bankDownload.selectNodes("Document/BkToCstmrStmt/Stmt") gIBAN = accountStatement.selectSingleNode("Acct/Id/IBAN").Text gSequenzNr = accountStatement.selectSingleNode("ElctrncSeqNb").Text ReadStatementEntries accountStatement.selectNodes("Ntry") Next accountStatement End Sub 我对 .XML 的了解非常有限(尝试错误)。所以这是我的两个问题: 有没有比 groupHeader.selectSingleNode("/bk:Document/bk:BkToCstmrStmt/bk:GrpHdr/bk:CreDtTm") 更好的方法 有关这个名称空间的整个内容看起来相当笨拙。有没有办法在不不断重复名称空间的情况下做到这一点 - 我确实只有这个单一的名称空间,所以这似乎是一个巨大的杀伤力......旧的东西完成了工作,看起来好多了...... 1- 如果添加命名空间,则修改代码如下: For Each groupHeader In bankDownload.selectNodes("ns:Document/ns:BkToCstmrStmt/ns:GrpHdr") Debug.Print "Erzeugungsdatum(CreDtTm)", groupHeader.selectSingleNode("ns:CreDtTm").Text Next groupHeader For Each accountStatement In bankDownload.selectNodes("ns:Document/ns:BkToCstmrStmt/ns:Stmt") gIBAN = accountStatement.selectSingleNode("ns:Acct/ns:Id/ns:IBAN").Text gSequenzNr = accountStatement.selectSingleNode("ns:ElctrncSeqNb").Text ReadStatementEntries accountStatement.selectNodes("ns:Ntry") Next accountStatement 或 2- 从文档中删除命名空间,使 <Document xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08 camt.053.001.08.xsd" xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 变为 <Document> 并像以前一样使用原始代码: Const s1 = "xsi:schemaLocation=""urn:iso:std:iso:20022:tech:xsd:camt.053.001.08 camt.053.001.08.xsd""" Const s2 = "xmlns=""urn:iso:std:iso:20022:tech:xsd:camt.053.001.08""" Const s3 = "xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""" Dim bankDownload As New MSXML2.DOMDocument60 bankDownload.validateOnParse = False bankDownload.Load Path_To_XML_File Dim xml As String xml = bankDownload.xml xml = Replace(xml, s1, "") xml = Replace(xml, s2, "") xml = Replace(xml, s3, "") bankDownload.loadXML xml Dim groupHeader As IXMLDOMNode For Each groupHeader In bankDownload.selectNodes("Document/BkToCstmrStmt/GrpHdr") Debug.Print "Erzeugungsdatum(CreDtTm)", groupHeader.selectSingleNode("CreDtTm").Text Next groupHeader Dim accountStatement As IXMLDOMNode For Each accountStatement In bankDownload.selectNodes("Document/BkToCstmrStmt/Stmt") gIBAN = accountStatement.selectSingleNode("Acct/Id/IBAN").Text gSequenzNr = accountStatement.selectSingleNode("ElctrncSeqNb").Text ReadStatementEntries accountStatement.selectNodes("Ntry") Next accountStatement

回答 1 投票 0

非命名空间感知 DOM 中的命名空间 XML 出现奇怪的 XPath 结果?

我有以下代码会导致意外结果: 文档文档 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(""...

回答 1 投票 0

带有命名空间的 xml 的 XPath

我有以下代码会导致意外结果: 文档文档 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(""...

回答 1 投票 0

无效的 XML 前缀

我正在尝试向 Swift Alliance Access(SAA) 发送 XML 消息。我的示例 xml 消息如下所示。但我收到“无效的 XML 前缀”错误消息。当我根据 XSD 检查 XML 时。它

回答 2 投票 0

如何消除重复的 XML 命名空间定义?

我经常遇到 XML,其中相同的命名空间被定义多次,而不是仅在需要它的元素的父元素处定义。 有没有一个简单的方法/工具来提取所有

回答 2 投票 0

为什么通过JS向HTML文档添加`svg`标签时需要使用`document.createElementNS`?

这行不通: const svg = document.createElement('svg') svg.setAttribute('高度', '100') svg.setAttribute('宽度', '100') 文档.body.appendChild(svg) const rect = document.createE...

回答 3 投票 0

如何为xml.etree中的属性设置命名空间

我想在 ElementTree 中设置属性的命名空间以获得以下结果。 我已经注册了名字...

回答 1 投票 0

创建具有多个命名空间和 xsi:type 属性的 XML 文档

如何使用 Python 和 lxml 创建此 XML 结构? 如何使用 Python 和 lxml 创建此 XML 结构? <?xml version="1.0" encoding="utf-8"?> <cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/4" xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/ComercioExterior11 http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xsd" Version="4.0" Fecha="2023-12-27T11:53:50"> <cfdi:Emisor Rfc="XAXX010101XXX" Nombre="COMPANY" RegimenFiscal="601"/> <cfdi:Receptor Rfc="XEXX010101XXX" Nombre="COMPANY" DomicilioFiscalReceptor="00000" RegimenFiscalReceptor="601" UsoCFDI="G01"/> <cfdi:Conceptos> <cfdi:Concepto ClaveProdServ="00000000" NoIdentificacion="XXXXX" Cantidad="1.000000" ClaveUnidad="EA" Unidad="PIEZA" Descripcion="XXXXX" ValorUnitario="1.00" Importe="1.00" ObjetoImp="00"> <cfdi:Impuestos> <cfdi:Traslados> <cfdi:Traslado Base="1.00" Importe="1.00" Impuesto="000" TipoFactor="Tasa" TasaOCuota="0.000000"/> </cfdi:Traslados> </cfdi:Impuestos> </cfdi:Concepto> </cfdi:Conceptos> <cfdi:Impuestos TotalImpuestosTrasladados="1.00"> <cfdi:Traslados> <cfdi:Traslado Base="1.00" Importe="1.00" Impuesto="000" TipoFactor="Tasa" TasaOCuota="0.000000"/> <cfdi:Traslado Base="1.00" Importe="1.00" Impuesto="000" TipoFactor="Tasa" TasaOCuota="0.000000"/> </cfdi:Traslados> </cfdi:Impuestos> </cfdi:Comprobante> 此结构用于墨西哥发票。 使用 Powershell 脚本。我对这些值进行了硬编码。我也硬编码了总数。 using assembly System.Xml.Linq $filename = 'c:\temp\test.xml' $emisorRfc = 'XAXX010101XXX' $receptorRfc = 'XEXX010101XXX' $nombre = 'COMPANY' $regimenFiscal = '601' $domicilioFiscalReceptor = '00000' $regimenFiscalReceptor = '601' $usoCFDI = 'G01' $claveProdServ = '00000000' $noIdentificacion = 'XXXXX' $cantidad = '1.000000' $claveUnidad = 'EA' $unidad = 'PIEZA' $descripcion = 'XXXXX' $valorUnitario = '1.00' $importe = '1.00' $objetoImp = '00' $base = '1.00' $importe = '1.00' $impuesto = '000' $tipoFactor = 'Tasa' $tasaOCuota = '0.000000' $ident = @' <?xml version="1.0" encoding="utf-8"?> <cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/4" xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/ComercioExterior11 http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xsd" Version="4.0" Fecha="2023-12-27T11:53:50"> </cfdi:Comprobante> '@ $xDoc = [System.Xml.Linq.XDocument]::Parse($ident) $root = $xDoc.Root $nscfdi = $root.GetNamespaceOfPrefix('cfdi') $nscce11 = $root.GetNamespaceOfPrefix('cce11') $nsxsi = $root.GetNamespaceOfPrefix('xsdi') $emisor = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Emisor')) $emisorRfcAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('RFC'), $emisorRfc) $emisor.Add($emisorRfcAttr) $emisorNombre = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Nombre'), $nombre) $emisor.Add($emisorNombre) $emisorRegimen = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('RegimenFiscal'), $regimenFiscal) $emisor.Add($emisorRegimen) $root.Add($emisor) $receptor = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Receptor')) $receptorRfcAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('RFC'), $receptorRfc) $receptor.Add($receptorRfcAttr) $receptor.Add($emisorNombre) $receptorDomicilioFiscal = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('DomicilioFiscalReceptor'), $domicilioFiscalReceptor) $receptor.Add($receptorDomicilioFiscal) $receptorRegimenFiscal = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('RegimenFiscalReceptor'), $regimenFiscalReceptor) $receptor.Add($receptorRegimenFiscal) $receptorUsoCFDI = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('UsoCFDI'), $usoCFDI) $receptor.Add($receptorUsoCFDI) $root.Add($receptor) $conceptos = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Conceptos')) $concepto = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Concepto')) $claveProdServAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('ClaveProdServ'), $claveProdServ) $concepto.Add($claveProdServAttr) $noIdentificacionAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('NoIdentificacion'), $noIdentificacion) $concepto.Add($noIdentificacionAttr) $cantidadAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Cantidad'), $cantidad) $concepto.Add($cantidadAttr) $claveUnidadAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('ClaveUnidad'), $claveUnidad) $concepto.Add($claveUnidadAttr) $unidadAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Unidad'), $unidad) $concepto.Add($unidadAttr) $descripcionAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Descripcion'), $descripcion) $concepto.Add($descripcionAttr) $valorUnitarioAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('ValorUnitario'), $valorUnitario) $concepto.Add($valorUnitarioAttr) $importeAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Importe'), $importe) $concepto.Add($importeAttr) $objetoImpAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('ObjetoImp'), $objetoImp) $concepto.Add($objetoImpAttr) $impuestos = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Impuestos')) $traslados = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Traslados')) $traslado = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Traslado')) $baseAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Base'), $base) $traslado.Add($baseAttr) $importeAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Importe'), $importe) $traslado.Add($importeAttr) $impuestoAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('Impuesto'), $impuesto) $traslado.Add($impuestoAttr) $tipoFactorAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('TipoFactor'), $tipoFactor) $traslado.Add($tipoFactorAttr) $tasaOCuotaAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('TasaOCuota'), $tasaOCuota) $traslado.Add($tasaOCuotaAttr) $traslados.Add($traslado) $impuestos.Add($traslados) $concepto.Add($impuestos) $conceptos.Add($concepto) $root.Add($conceptos) $impuestos = [System.Xml.Linq.XElement]::new([System.Xml.Linq.XName]::Get($nscfdi + 'Impuestos')) $totalImpuestosTrasladados = '1.00' $totalImpuestosTrasladadosAttr = [System.Xml.Linq.XAttribute]::new([System.Xml.Linq.XName]::Get('TotalImpuestosTrasladados'), $totalImpuestosTrasladados) $impuestos.Add($totalImpuestosTrasladadosAttr) $root.Add($impuestos) $xDoc.Save($filename)

回答 1 投票 0

尝试使用pyadomd刷新数据模型,但获取命名空间无法出现在Envelope/Body/Execute/Command下

我正在使用 pyadomd 连接到 azure 分析服务并尝试刷新数据模型。连接成功,但出现以下错误“namespace http://schemas.microsoft....

回答 1 投票 0

如何在oracle plsql中获取命名空间根元素列表

我想从 Oracle PLSQL 中的根元素中提取命名空间列表 我的xml例如:(实际上它可能很大) 我想从 Oracle PLSQL 中的根元素中提取命名空间列表 我的xml例如:(实际上它可能很大) <my_xml xmlns="http://example.com/ns1" xmlns:foo="http://example.com/ns2"> <aaa></aaa> <myelement> <foo:/bbb> </myelement> </my_xml> 我需要它,因为在收到 xml 之前我不知道名称空间。 它是自动序列化和随机的。 我需要知道命名空间才能从 xml 中提取元素“my_element”。 谢谢帮助。 我期望结果为具有所有命名空间的 varchar2 变量: "xmlns="http://example.com/ns1" xmlns:foo="http://example.com/ns2"" 我尝试了我所知道的,但是 dbms_xmldom.getNamespace 只为我提供了 DMBSXMLemement 的第一个命名空间。 我无法访问属性的命名空间。 我想要一些好的标准解决方案。我知道我可以通过一些 substr、instr() 等来做到这一点。 我不知道正则表达式是否是个好主意? 通过混合 DBMS_XMLDOM 功能和 REGEXP_SUBSTR,您最终会得到一个解决方案,这要归功于 writeToBuffer() 重写 XML,以便根节点仅位于 1 行: CREATE OR REPLACE TYPE STRING_T AS TABLE OF VARCHAR2(4000); / CREATE OR REPLACE FUNCTION xmlrootnamespaces(p_xml IN VARCHAR2) RETURN T_STRING PIPELINED IS v_buf CLOB ; v_roottag VARCHAR2(4000); PRAGMA UDF; BEGIN v_roottag := DBMS_XMLDOM.getTagName(DBMS_XMLDOM.getDocumentElement(DBMS_XMLDOM.newDOMDocument(xmltype(p_xml)))) ; DBMS_XMLDOM.writeToBuffer(DBMS_XMLDOM.makeNode(DBMS_XMLDOM.newDOMDocument(p_xml)), v_buf); v_roottag := regexp_substr(v_buf, '<' || v_roottag || '.*>'); FOR rec in ( select regexp_substr(p_xml, 'xmlns.*?=[^[:space:]]*', 1, level) as ns from dual connect by level <= regexp_count(p_xml, 'xmlns.*?=[^[:space:]]*') ) LOOP PIPE ROW(rec.ns); END LOOP ; RETURN ; END ; / select * from xmlrootnamespaces(q'~<?xml version="1.0" encoding="UTF-8"?> <my_xml xmlns="http://example.com/ns1" xmlns:foo="http://example.com/ns2"> <aaa></aaa> <myelement> <foo:bbb /> </myelement> </my_xml>~') ; COLUMN_VALUE ------------------------------------------------ xmlns="http://example.com/ns1" xmlns:foo="http://example.com/ns2"> 适应您的进一步需求。

回答 1 投票 0

按特定顺序编写 XML 属性和命名空间声明

我正在尝试创建一个带有根元素的 XML 文件: 所以我有一个元素命令 命名空间命名空间URI 前缀瓮 最后是

回答 2 投票 0

WSDL 文件具有未定义的命名空间“ns1”和“xs”?

对 SOAP 和 WSDL 来说还是很陌生,但我有几个简单的问题。我在使用的 WSDL 文件中看到如下所示的部分,但名称空间 ns1 未在任何地方定义?元素

回答 1 投票 0

当第一个元素中存在多个 xmlns 属性时,xmlstarlet 无法添加子节点

我有一个xml文件test.gpx: 猫测试.gpx 我有一个 xml 文件 test.gpx: cat test.gpx <?xml version="1.0" encoding="UTF-8"?> <gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1"> <trk> <name>Name 1</name> <desc>Description 1</desc> </trk> <trk> <name>Name 2</name> <desc>Description 2</desc> </trk> </gpx> 尝试在此文件中插入子节点时,xmlstartlet无法成功执行: xmlstarlet edit --subnode "/gpx/trk" --type elem -n "new" -v "Hello World!" test.gpx <?xml version="1.0" encoding="UTF-8"?> <gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1"> <trk> <name>Name 1</name> <desc>Description 1</desc> </trk> <trk> <name>Name 2</name> <desc>Description 2</desc> </trk> </gpx> 虽然第一个 gpx 元素中只有一个属性,但它有效: xmlstarlet edit --subnode "/gpx/trk" --type elem -n "new" -v "Hello World!" test.gpx <?xml version="1.0" encoding="UTF-8"?> <gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <trk> <name>Name 1</name> <desc>Description 1</desc> <new>Hello World!</new> </trk> <trk> <name>Name 2</name> <desc>Description 2</desc> <new>Hello World!</new> </trk> </gpx> 因此我的问题是:我如何才能成功处理原始文件,在其第一个 gpx 元素中具有多个属性? 版本信息: xmlstarlet --version 1.6.1 compiled against libxml2 2.9.10, linked with 20913 compiled against libxslt 1.1.34, linked with 10134 在 Ubuntu 22.04 上。 您正在处理的属性不仅仅是普通的属性 - 它们是命名空间并且必须相应地考虑在内。由于您的第一个(但不是第二个)文件中有默认名称空间,因此您可以通过以下两种方式之一来处理它。 长而明确的方式: xmlstarlet ed -N x=http://www.topografix.com/GPX/1/1 --subnode "/x:gpx/x:trk" --type elem -n "new" -v "Hello World!" test.gpx 或更短的: xmlstarlet ed --subnode "/_:gpx/_:trk" --type elem -n "new" -v "Hello World!" test.gpx 任何一个都应该给你预期的输出。

回答 1 投票 0

XSLT 匹配 xhtml 命名空间

美好的一天, 我正在尝试使用以下命令行将 html 文件生成的 xhtml 文件中的“head”元素与 HTML tidy 标记校正器进行匹配: tidy -asxml -输出 test_tidy.html --numeric-

回答 1 投票 0

定义不带命名空间的 XSD(XML 架构)类型,但使用命名空间引用它

抱歉,如果这个问题有点奇怪,但我是 XSD 新手,并且有一段我无法理解的 XSD 代码。代码如下,因为如果没有代码,问题会相当混乱。 XSD...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.