标签: xml-namespaces

如何使用冒号解组 xml 元素

正如代码所言,我无法在 Go 中使用冒号解组 xml 元素。

https://play.golang.org/p/zMm5IQSfS01

package main

import (
    "fmt"
    "encoding/xml"
)

type Obj struct {
    XMLName xml.Name `xml:"book"`
    AbcName string   `xml:"abc:name"`
}

func main() {
    a := []byte(`<book><abc:name>text</abc:name></book>`)
    obj := &Obj{}
    if err := xml.Unmarshal(a, obj); err != nil {
        panic(err)
    }
    fmt.Printf("%#v\n", obj)
}
Run Code Online (Sandbox Code Playgroud)

代码输出:

&main.Obj{XMLName:xml.Name{Space:"", Local:"book"}, AbcName:""}
Run Code Online (Sandbox Code Playgroud)

是否可以在 Golang 中使用冒号解组 xml 元素?如果是,怎么办?

xml xml-namespaces go

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

具有命名空间的XPath和XML

我有以下XML:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAgence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns="http://www.artos.co.il/">
  <Agence>
    <CodeAval>20008</CodeAval>
    <CodeSource>ArtPO</CodeSource>
    <LogicielSource>NTLIS</LogicielSource>
</Agence>
</ArrayOfAgence>
Run Code Online (Sandbox Code Playgroud)

我想获得CodeAval值,所以我试过:

ArrayOfAgence/Agence/CodeAval
Run Code Online (Sandbox Code Playgroud)

它显然没有用,因为这个XML有一个命名空间,所以,我该如何处理呢?

谢谢,

xml xpath xml-namespaces

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

XML命名空间正在抛弃我的XSLT

我有一个xml文档,其名称空间看起来与此类似,我只是为了提问而简化它.

<MyNameSpace xmlns="http://schemas.microsoft.com/dynamics/2006/02/documents/MyNameSpace">
<IDmain>ins</IDmain>
    <Table_1 class="entity">
        <Address>Oak Park Drive</BillingProviderAddress>
        <City>Lake Elizabeth</BillingProviderCity>
        <Name>Corporation</BillingProviderOrgName>
        <InvoiceLine class ="entity">
            <DateService>1234</DateService>
        </InvoiceLine>
    <Table_1>
</MyNameSpace>
Run Code Online (Sandbox Code Playgroud)

然后我在这里创建了一个XSLT.我理解它的丑陋,我不是XSLT专家,但这是"只是解决问题"的时刻之一.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">

<xsl:variable name="vPrefix">
<xsl:value-of select="MyNameSpace/Table_1/Address"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="MyNameSpace/Table_1/City"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="MyNameSpace/Table_1/Name"/>
<xsl:text>|</xsl:text>
</xsl:variable>

<xsl:for-each select="MyNameSpace/Table_1/InvoiceLine">
        <xsl:value-of select="$vPrefix"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="DateService"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

现在,XSLT完全符合我的要求,问题是,我的测试数据在XML文档的顶部包含了这个时髦的命名空间.

的xmlns = "http://schemas.microsoft.com/dynamics/2006/02/documents/MyNameSpace"

有两件事,我正在使用XMLPAD,当我运行脚本时,它实际上就可以使用名称空间.

不幸的是,该解决方案并不理想,因为当我尝试在我需要的另一个XSLT工具中运行它时(在运行时)它无法正常运行.

我知道命名空间正在抛弃我正在使用的XSLT,因为当我从XML中删除它时,它在测试中运行良好.然而,这种解决方案并不合理,因为整个过程实际上是自动化的.所以我需要一个名称空间问题的解决方案.

有什么想法吗?

xml xslt xml-namespaces

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

使用jdom设置命名空间

我想在xml中使用这种格式:

<ns2: test xmlns="url" xmlns:ns2="url2" xmlns:ns3="url3">
....
</ns2: test>
Run Code Online (Sandbox Code Playgroud)

我使用以下代码:

    Namespace ns= Namespace.getNamespace("url");
    Namespace ns2 = Namespace.getNamespace("ns2", "url2");
    Namespace ns3= Namespace.getNamespace("ns3", "url3");

    SAXBuilder vDocBuilder = new SAXBuilder();
    Document vDocument = vDocBuilder.build(File);

    System.out.println("Root element " + vDocument.getRootElement().getName());

    org.jdom.Element test = new org.jdom.Element("test", ns);
    vDocument.setRootElement(test);
    vNewRootElement.addNamespaceDeclaration(ns2);
    vNewRootElement.addNamespaceDeclaration(ns3);
Run Code Online (Sandbox Code Playgroud)

如果我设置名称空间:

    vNewRootElement.setNamespace(ns3);
Run Code Online (Sandbox Code Playgroud)

然后我得到了

    <ns2: test xmlns:ns2="url2" xmlns:ns3="url3"> ... </ns2: test> 
without the default namespace xmlns="url".
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么它不起作用,有没有办法解决这个问题?

谢谢,哈纳

java xml-namespaces jdom

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

将新属性添加到MemoryStream XML

我想补充一下

xsi:noNamespaceSchemaLocation="FullModeDataset.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

作为我的根节点"ApplicationData"的属性,所以根节点将如下所示..

 <ApplicationData
  xsi:noNamespaceSchemaLocation="FullModeDataset.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
Run Code Online (Sandbox Code Playgroud)

我正在从一个字符串创建xml,使用此代码输出一个正确的xml字符串.

var doc = new XmlDocument();
            doc.LoadXml(myInputXmlString);
            var ms = new MemoryStream();
            var tx = XmlWriter.Create(ms,
                        new XmlWriterSettings
                        {
                            OmitXmlDeclaration = false,
                            ConformanceLevel = ConformanceLevel.Document,
                            Encoding = UTF8Encoding.UTF8
                        });
            doc.Save(tx);

              //I TRIED THE COMMENTED CODE BELOW BUT WITH NO SUCCESS
             //XmlAttribute newAttr = doc.CreateAttribute("xsi:noNamespaceSchemaLocation");
             //newAttr.Value = "FullModeDataset.xsd";

            //XmlElement applicationNode = doc.DocumentElement["AppicationData"];
            //applicationNode.Attributes.Append(newAttr);
            //doc.Save(tx);

            var xmlString = UTF8Encoding.UTF8.GetString(ms.ToArray());
Run Code Online (Sandbox Code Playgroud)

如何将这些属性添加到我的xml字符串?

c# xml xml-namespaces

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

在前缀元素下没有xmlns的XmlDocument CreateElement

我正在尝试通过使用以下代码中的C#XmlDocument类来编写一个SOAP请求来ebay FindingAPI Web服务:

XmlDocument doc = new XmlDocument();
XmlElement root = (XmlElement)doc.AppendChild(doc.CreateElement("soap", "Envelope", "http://www.w3.org/2003/05/soap-envelope"));
root.SetAttribute("xmlns", "http://www.ebay.com/marketplace/search/v1/services");
XmlElement header = (XmlElement)root.AppendChild(doc.CreateElement("soap", "Header", "http://www.w3.org/2003/05/soap-envelope"));
XmlElement body = (XmlElement)root.AppendChild(doc.CreateElement("soap", "Body", "http://www.w3.org/2003/05/soap-envelope"));
XmlElement request = (XmlElement)body.AppendChild(doc.CreateElement("findItemsByKeywordsRequest"));
XmlElement param = (XmlElement)request.AppendChild(doc.CreateElement("keywords"));
param.InnerText = "harry potter phoenix";
Run Code Online (Sandbox Code Playgroud)

并且,上面代码的XML输出是:

<soap:Envelope xmlns="http://www.ebay.com/marketplace/search/v1/services" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header />
    <soap:Body>
        <findItemsByKeywordsRequest xmlns="">
            <keywords>harry potter phoenix</keywords>
        </findItemsByKeywordsRequest>
    </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

但是,由于findItemsByKeywordsRequest元素中的额外xmlns =""属性,服务器无法识别此XML.所需的XML输出应如下所示:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.ebay.com/marketplace/search/v1/services">
    <soap:Header/>
    <soap:Body>
        <findItemsByKeywordsRequest>
            <keywords>harry potter phoenix</keywords>
        </findItemsByKeywordsRequest>
    </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

有谁知道我的代码有什么问题,请给我一些提示.谢谢!

c# xml xmldocument prefix xml-namespaces

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

如何从scala.xml获取命名空间节点?

看着RSS,像Craigslist的(http://chambana.craigslist.org/cta/index.rss)这样的东西会给两个节点都命名空间,而没有命名空间。

就像是:

<item rdf:about="http://dallas.craigslist.org/sdf/cto/4206532641.html">
<title>
<![CDATA[ 1965 Pontiac Tempest GTO tribute ]]>
</title>
...tl;dr...
<dc:title>
<![CDATA[ 1965 Pontiac Tempest GTO tribute ]]>
</dc:title>
</item>
Run Code Online (Sandbox Code Playgroud)

就像是:

(item \ "title").text
Run Code Online (Sandbox Code Playgroud)

两次给出标题。如何访问命名空间节点?

scala xml-namespaces

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

XSLT中的别名前缀(不是命名空间)

我想在样式表本身的前缀中更改输出中的前缀.

XSLT文件:

<stylesheet version="1.0" xmlns:a="nsA">
 <template match="/">
  <a:out/>
 </template>
</stylesheet>
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

<a:out xmlns:a="nsA" />
Run Code Online (Sandbox Code Playgroud)

我想要的是:

<b:out xmlns:b="nsA" />
Run Code Online (Sandbox Code Playgroud)

请注意,我只想更改前缀,而不是命名空间.元命名空间别名将仅转换命名空间,保留前缀不变.

如果可以完全删除前缀,则可以获得奖励积分:

<out xmlns="nsA" />
Run Code Online (Sandbox Code Playgroud)

请注意,XSLT元素没有前缀,输出元素是前缀.它必须保持这样.我知道问题可以通过前缀XSLT和取消前缀输出元素来解决,但它不是一个选项.要输出的元素必须具有样式表中提供的前缀,只有在输出中才能更改它们.

xml xslt transformation xml-namespaces

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

错误:未声明前缀“ xsi”的命名空间。

为什么会出现此错误:

错误:未声明前缀“ xsi”的命名空间。

这是我的Java代码:

package com.emp.ma.jbl.nsnhlrspmlpl.nsnhlrspmlpl.internal.action;
import com.emp.ma.util.xml.XMLDocument;
import com.emp.ma.util.xml.XMLDocumentBuilder;

 public class yay {            
        public static void main(String[] args) {
            XMLDocument xmldoc = XMLDocumentBuilder.newDocument().addRoot("spml:modifyRequest");
            xmldoc.gotoRoot().addTag("modification").addText("");
            xmldoc.gotoChild("modification").addTag("valueObject").addText("");
            xmldoc.gotoChild("valueObject").addAttribute("xsi:type","halo");
            System.out.println(xmldoc);
        }            
    }
Run Code Online (Sandbox Code Playgroud)

直到我尝试引发转换器异常,同时将XML文件转换为HTML进行实验时,这段代码才能正常运行。我需要创建一个格式为xml的文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<spml:modifyRequest>   
  <modification>
    <valueObject xsi:type="halo">
    </valueObject>   
  </modification>
</spml:modifyRequest>
Run Code Online (Sandbox Code Playgroud)

我已经从代码中删除了转换器部分,但是在eclipse中却遇到了这个错误:

 ERROR:  'Namespace for prefix 'xsi' has not been declared.'
    Exception in thread "main" com.emp.ma.util.xml.XMLDocumentException: java.lang.RuntimeException: Namespace for prefix 'xsi' has not been declared.
        at com.emp.ma.util.xml.XMLDocumentImpl.toResult(XMLDocumentImpl.java:1244)
        at com.emp.ma.util.xml.XMLDocumentImpl.toStream(XMLDocumentImpl.java:1314)
        at com.emp.ma.util.xml.XMLDocumentImpl.toString(XMLDocumentImpl.java:1336)
        at com.emp.ma.util.xml.XMLDocumentImpl.toString(XMLDocumentImpl.java:1325)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java xml xslt xml-namespaces

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

TSQL XML存在具有名称空间和IF-ELSE条件的查询

我想编写将XML exists()函数与命名空间和IF-ELSE构造结合使用的T-SQL代码。

这个线程中,我知道这WITH XMLNAMESPACES是用来使用名称空间的。我也知道该exist()函数用于确定XML变量中是否存在节点。

到目前为止,我的用法exist()如下:

IF ((@MyXML.exist('someNode')) = 0)
BEGIN
    -- Do Something
END
ELSE
BEGIN
    -- Do Something else
END
Run Code Online (Sandbox Code Playgroud)

但是,如果需要使用名称空间,我不知道如何结合使用。我尝试如下,但收到错误。

;WITH XMLNAMESPACES('http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message' AS ns)
IF ((@MyXML.exist('ns:someNode')) = 0)
BEGIN
    -- Do Something
END
ELSE
BEGIN
    -- Do Something else
END
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

关键字“ WITH”附近的语法不正确。

因此,我的问题是:如何将T-SQL If-Else构造与XML名称空间和XML exist()函数结合使用?

xml t-sql sql-server exists xml-namespaces

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

标签 统计

xml-namespaces ×10

xml ×8

xslt ×3

c# ×2

java ×2

exists ×1

go ×1

jdom ×1

prefix ×1

scala ×1

sql-server ×1

t-sql ×1

transformation ×1

xmldocument ×1

xpath ×1