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



我正在尝试使用Google Apps Script在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);
}

但是,在运行此代码时,我在Logger.log中遇到以下错误

[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">

但是,这是自己创造的。我怎样才能绕过这个无文档类型声明?

我相信你的目标如下。

  • 您希望使用 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>
    

为此,进行此修改怎么样?在您的脚本中,为了检索结果 xml 数据,请使用XmlService.getPrettyFormat().format(document)。此外,脚本中有几个修改点来实现上述样本值。所以,我也修改了它们。

修改后的脚本:

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);
}
  • 示例输出值与脚本中的contractInfo值不同。所以我使用以下contractInfo作为示例值。

    var contractInfo = [
    ["TestingXML","Some Testing Value"],
    ["Address_es_:prefill", "Client Address"],
    ["Address1_es_:prefill", "Project Address"]
    ];
    
  • 运行上述脚本时,可以获取如上一节所示的示例输出值。

引用:

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

最新更新