当前位置: 首页 > 知识库问答 >
问题:

使用Google Apps脚本在XML中设置命名空间前缀

元修然
2023-03-14

我正在尝试使用Google Apps脚本在XML文件中创建以下结构:

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/">
  <fields>
    <field name="TestingXML">
      <value>Some Testing Value</value> 
    </field>
    <field name="Address_es_:prefill">
      <value>Client Address</value>
    </field>
    <field name="Address1_es_:prefill">
      <value>Project Address</value>
    </field>
  </fields>
</xfdf>

尝试设置命名空间前缀时会出现问题:

xmlns="http://ns.adobe.com/xfdf/"

以下是我目前的代码:

  var contractInfo = [
    ["Customer Name_es_:prefill","ownerFullName"],
    ["Address_es_:prefill", "clientAddress"],
    ["Address_Project_es_:prefill", "projectAddress"]
  ];

function CreateXML(contractInfo){
  //Define Namespace
  var nsh = XmlService.getNamespace('http://ns.adobe.com/xfdf/');

 //Create the root element and set the namespace
  var root = XmlService.createElement('xfdf', nsh);
  
  //Create the next section
  var fields = XmlService.createElement('fields');
  root.addContent(fields); //attach this section to the root
  
  //Loop and create the rest of sections based on an 2D array object.
  for(var m = 0; m < contractInfo.length; m++){

    var child1 = XmlService.createElement('field')
    .setAttribute('name', contractInfo[m][0]);
    
    var chiled2 = XmlService.createElement('value').setText(contractInfo[m][1]);
    child1.addContent(chiled2);
    fields.addContent(child1);
  }
  
  var document = XmlService.createDocument(root);
  //var xml = XmlService.getPrettyFormat().format(document);
  Logger.log(document);
}

然而,当运行这段代码时,我在日志中遇到了以下错误。日志

[Document:  No DOCTYPE declaration, Root is [Element: <xfdf [Namespace: http://ns.adobe.com/xfdf/]/>]]

理想情况下,输出XML如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/">
  <fields>
    <field name="TestingXML">
      <value>Some Testing Value</value> 
    </field>
    <field name="Address_es_:prefill">
      <value>Client Address</value>
    </field>
    <field name="Address1_es_:prefill">
      <value>Project Address</value>
    </field>
  </fields>
</xfdf>

我想我一开始就错过了这一节:

xml版本=“1.0”编码=“UTF-8”

然而,这是它自己创造的。我如何绕过这个无DOCTYPE声明?

共有1个答案

束新
2023-03-14

我相信你的目标如下。

>

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/">
  <fields>
    <field name="TestingXML">
      <value>Some Testing Value</value>
    </field>
    <field name="Address_es_:prefill">
      <value>Client Address</value>
    </field>
    <field name="Address1_es_:prefill">
      <value>Project Address</value>
    </field>
  </fields>
</xfdf>

对于这个,这个修改怎么样?在您的脚本中,为了检索结果xml数据,请使用XmlService.getPretyFormat(). form(文档)。此外,您的脚本中有几个修改点可以实现上述示例值。因此,我还修改了它们。

function CreateXML(contractInfo){

  // This is a sample value. Please modify this for your actual situation.
  var contractInfo = [
    ["TestingXML","Some Testing Value"],
    ["Address_es_:prefill", "Client Address"],
    ["Address1_es_:prefill", "Project Address"]
  ];

  var nsh = XmlService.getNamespace('http://ns.adobe.com/xfdf/');
  var root = XmlService.createElement('xfdf', nsh);
  var fields = XmlService.createElement('fields', nsh);  // Modified
  for(var m = 0; m < contractInfo.length; m++){
    var child1 = XmlService.createElement('field', nsh).setAttribute('name', contractInfo[m][0]);  // Modified
    var chiled2 = XmlService.createElement('value', nsh).setText(contractInfo[m][1]);  // Modified
    child1.addContent(chiled2);
    fields.addContent(child1);
  }
  root.addContent(fields);  // Added
  var document = XmlService.createDocument(root);
  var res = XmlService.getPrettyFormat().format(document);  // Added
  console.log(res);
}

>

  • 示例输出值与脚本中的压缩信息值不同。因此,我使用以下压缩信息作为样本值。

    var contractInfo = [
      ["TestingXML","Some Testing Value"],
      ["Address_es_:prefill", "Client Address"],
      ["Address1_es_:prefill", "Project Address"]
    ];
    

    当运行上述脚本时,可以获得上述部分所示的示例输出值。

    • XML服务
    • getPrettyFormat()
    • 格式(文档)

  •  类似资料:
    • 主要内容:命名冲突,使用前缀来避免命名冲突,XML 命名空间 - xmlns 属性,统一资源标识符(URI,全称 Uniform Resource Identifier),默认的命名空间,实际使用中的命名空间XML 命名空间提供避免元素命名冲突的方法。 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。 这个 XML 携带 HTML 表格的信息: <table> <tr> <td>Apples</td> <td>Bananas</td> <

    • 首先,我使用Camel 2.15版(在Fuse 6.2.1中)创建了一些路由。 在我的过程中,我试图从使用cxf xjc maven插件生成的pojo中创建一个XML(cxf xjc从xsd的某个地方读取了一些xsd,然后生成了带有jaxb注释的pojo)。 pojos是TempProject和TempProjects。 我可以使用以下代码生成xml: 我打电话 在我实现从pojo到xml的编组的

    • 命名空间是设计用来扑捉框架最常见用途和提供一个简化和简介的语法用来在应用程序中打开他们。设计是基于框架中的大规模依赖,并且可以划分为以下几个方面: Web/HTTP 安全- 最复杂的部分,设置过滤器和应用框架验证机制的相关服务bean,渲染登录和错误页面等等。 业务对象(方法)安全 - 业务层安全选项. AuthenticationManager - 处理来自框架其他部分的认证请求 AccessD

    • 为什么using指令在包含在匿名命名空间中时表现得好像出现在全局范围?

    • XML信封命名空间的正确URI是什么。我见过很多,例如。”http://www.w3.org/2001/12/soap-envelope“,”http://www.w3.org/2001/06/soap-envelope“,”http://www.w3.org/2003/05/soap-envelope“,”http://schemas.xmlsoap.org/soap/envelope/“。请告

    • 我需要解析和打印ns4:功能部分。空手道以json格式打印它。我试着参考这个答案。但是,我得到'ERROR:'前缀'xsi'的命名空间没有被声明.'错误,如果使用建议的xPath.即, 这是我的XML:它包含许多具有不同“ns”值的部分,但我在这里给出了一个额外的内容。 这是我使用的xPath; 注意:我将上述xml保存在一个单独的文件test1中。xml。我只是在读它并解析它的值。 这就是我得到