douminfu8033 2019-03-14 07:32
浏览 39

为什么不在nojejs xml-c14n中使用canonicalizer XML

I have problem in XML, when I need that a element child contain Parent's attributes in Nodejs. Now only atribute show in child canonicalized is xmlns, but, for instance, there are attributes xmlns:ns1, xmlns:types, the attributes don't in child element after function canonicalize.

I cant't to search function/lib in Node, make this for me.

In PHP I can do this, with function C14N.

In PHP i have :

Input :

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<ns1:SendTest xmlns:ns1="http://localhost:8080/TestA/a" xmlns:type="http://localhost:8080/TestA/b" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://localhost:8080/TestA/a http://localhost:8080/TestA/xsd/SendTest.xsd">
   <HEAD>
      <TESTA>6291</TESTA>
   </HEAD>
   <TESTB Id="testeb:1ABCDZ">
      <TESTC>
         <TESTD>e4c47c91392cd57088c28468be0ef2349782f2df</TESTD>
      </TESTC>
   </TESTB>
</ns1:SendTest>';

PHP Code:

$d = new DOMDocument('1.0');
$d->loadXML($xml);    
$data = $d->getElementsByTagName('TESTB')->item(0)->C14N(FALSE,FALSE,NULL,NULL);
echo ($data);
die();

OUTPUT :

<?xml version="1.0" encoding="UTF-8"?>
<TESTB xmlns:ns1="http://localhost:8080/TestA/a" xmlns:type="http://localhost:8080/TestA/b" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="testeb:1ABCDZ">
   <TESTC>
      <TESTD>e4c47c91392cd57088c28468be0ef2349782f2df</TESTD>
   </TESTC>
</TESTB>

not Working in NodeJs (xml-c14n) :

const c14n      = require("xml-c14n")();
const DOMParser = require("xmldom").DOMParser;
async function test (){
  let xml = xml(input PHP);
  let doc = (new DOMParser()).parseFromString(xml);
  let canonicalizer = c14n.createCanonicaliser("http://www.w3.org/2001/10/xml-exc-c14n#");
  let lote = doc.getElementsByTagName('TESTB');
  let canonicalized = await canonicalizer.canonicalise(lote[0]);
  console.log(canonicalized.toString());
}
test();

output :

<TESTB Id="testeb:1ABCDZ">
            <TESTC>
               <TESTD>e4c47c91392cd57088c28468be0ef2349782f2df</TESTD>
            </TESTC>
          </TESTB>

The result I get is not correct,suggestion for my question?

展开全部

  • 写回答

0条回答 默认 最新

      编辑
      预览

      报告相同问题?

      手机看
      程序员都在用的中文IT技术交流社区

      程序员都在用的中文IT技术交流社区

      专业的中文 IT 技术社区,与千万技术人共成长

      专业的中文 IT 技术社区,与千万技术人共成长

      关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

      关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

      客服 返回
      顶部