使用 Google Apps 脚本在 XML 中设置命名空间前缀
Set Namespace prefix in XML using Google Apps Script
我正在尝试使用 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);
}
但是,当 运行 这段代码时,我在 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 version="1.0" encoding="UTF-8"
但是,这是它自己创建的。我怎样才能绕过这个没有 DOCTYPE 声明?
我相信你的目标如下。
您想使用 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"]
];
当上述脚本为运行时,可得到如上节所示的示例输出值
参考文献:
我正在尝试使用 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);
}
但是,当 运行 这段代码时,我在 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 version="1.0" encoding="UTF-8"
但是,这是它自己创建的。我怎样才能绕过这个没有 DOCTYPE 声明?
我相信你的目标如下。
您想使用 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"] ];
当上述脚本为运行时,可得到如上节所示的示例输出值