错误:“没有说明名称空间前缀“xmi”。”
javax.xml.transform.TransformerException: java.lang.RuntimeException: 没有说明名称空间前缀“xmi”。
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:717)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at com.cellcom.cjs.pra.PrtToPra.transform(PrtToPra.java:203)
at com.cellcom.cjs.pra.PrtToPra.transform(PrtToPra.java:69)
at com.cellcom.cjs.pra.PrtToPra.main(PrtToPra.java:221)
Caused by: java.lang.RuntimeException: 没有说明名称空间前缀“xmi”。
at com.sun.org.apache.xml.internal.serializer.SerializerBase.getNamespaceURI(SerializerBase.java:895)
at com.sun.org.apache.xml.internal.serializer.SerializerBase.addAttribute(SerializerBase.java:422)
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.addAttribute(ToUnknownStream.java:291)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:197)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:90)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708)
... 4 more
---------
java.lang.RuntimeException: 没有说明名称空间前缀“xmi”。
at com.sun.org.apache.xml.internal.serializer.SerializerBase.getNamespaceURI(SerializerBase.java:895)
at com.sun.org.apache.xml.internal.serializer.SerializerBase.addAttribute(SerializerBase.java:422)
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.addAttribute(ToUnknownStream.java:291)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:197)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:90)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at com.cellcom.cjs.pra.PrtToPra.transform(PrtToPra.java:203)
at com.cellcom.cjs.pra.PrtToPra.transform(PrtToPra.java:69)
at com.cellcom.cjs.pra.PrtToPra.main(PrtToPra.java:221)----------------------
读取的xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<pra:CjsAutomation xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:pra="http://www.cellcom.com/pra" xmi:id="_qUmdAKsvEd6ULeXTT65tgQ">
  <start xmi:type="pra:Start" xmi:id="_qUmdAasvEd6ULeXTT65tgQ" description="查询所有公司  " nameLabel="开始" target="_qUmdBqsvEd6ULeXTT65tgQ">
    <jspIn xmi:type="pra:JspIn" xmi:id="_qUmdAqsvEd6ULeXTT65tgQ"/>
    <jspOut xmi:type="pra:JspOut" xmi:id="_qUmdA6svEd6ULeXTT65tgQ">
      <jspParameter xmi:type="pra:JspParameter" xmi:id="_qUmdBKsvEd6ULeXTT65tgQ" id="1" type="Node_Entity" value="/gg" description="ddddddd"/>
    </jspOut>
  </start>
  <end xmi:type="pra:End" xmi:id="_qUmdBasvEd6ULeXTT65tgQ" nameLabel="结束"/>
  <hciState xmi:type="pra:HciState" xmi:id="_qUmdBqsvEd6ULeXTT65tgQ" description="" nameLabel="FindAllCom" name="method.com.bqdx.dzqf.operation.FindAllCom" type="businessLogic" unitIdType="constant">
    <action xmi:type="pra:Action" xmi:id="_qUmdCKsvEd6ULeXTT65tgQ" type="constant" value="method.com.bqdx.dzqf.operation.FindAllCom"/>
    <next xmi:type="pra:Next" xmi:id="_qUmdCasvEd6ULeXTT65tgQ">
      <case xmi:type="pra:Case" xmi:id="_qUmdCqsvEd6ULeXTT65tgQ" type="defaultTarget" from="_qUmdBqsvEd6ULeXTT65tgQ" to="_qUmdC6svEd6ULeXTT65tgQ"/>
    </next>
  </hciState>
  <hciState xmi:type="pra:HciState" xmi:id="_qUmdC6svEd6ULeXTT65tgQ" description="f" nameLabel="groupsend.jsp" name="/dzqunfa/page/groupsend.jsp" type="jspView">
    <action xmi:type="pra:Action" xmi:id="_qUmdDasvEd6ULeXTT65tgQ" type="variable" value="/dzqunfa/page/groupsend.jsp"/>
    <next xmi:type="pra:Next" xmi:id="_qUmdDqsvEd6ULeXTT65tgQ">
      <case xmi:type="pra:Case" xmi:id="_qUmdD6svEd6ULeXTT65tgQ" type="defaultTarget" from="_qUmdC6svEd6ULeXTT65tgQ" to="_qUmdBasvEd6ULeXTT65tgQ"/>
    </next>
  </hciState>
</pra:CjsAutomation>----------------------------
相关的java代码:public boolean transform(String sourceFilePath, String targetFilePath)
throws SAXException, IOException, ParserConfigurationException {
File sourceFile = new File(sourceFilePath);
if (!sourceFile.isFile() ||
!sourceFile.exists()) {
System.out.println("源文件不存在");
return (false);
}
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document sDocument = builder.parse(sourceFilePath);
sDocument.normalize();
NodeList startList = sDocument.getElementsByTagName("start");
NodeList endList = sDocument.getElementsByTagName("end"); //这里获取的方式需要更改 ---通过开始节点的目标id指向 来定位,这里只需要获得开始图元的指向id即可
String startTargetXmiId = ((Element) startList.item(0)).getAttribute("target");
String endXmiId = ((Element) endList.item(0)).getAttribute("xmi:id");
//int startPosition = Integer.parseInt(((Element) startList.item(0)).getAttribute("target").split("\\.")[1]);

NodeList hciStateList = sDocument.getElementsByTagName("hciState");
NodeList nextList = sDocument.getElementsByTagName("next"); Document tDocument = builder.newDocument();
Element root = tDocument.createElement("eosAutomation");
root.setAttribute("id", sourceFile.getName().substring(0, sourceFile.getName().length() - ".pra".length()));//id设置为没有扩展名的文件名称
root.setAttribute("productVersion", "1.0");
root.setAttribute("type", "hci");
Element info = tDocument.createElement("info");
info.setAttribute("ModelName", "Test");
info.setAttribute("author", "test");
info.setAttribute("automationVersion", "1.0");
info.setAttribute("date", new Date().toLocaleString());
info.setAttribute("department", "one");
info.setAttribute("description", "this is test.");
info.setAttribute("reurnValue", "");
Comment comment = tDocument.createComment("@cjs_info<cjs_info><description></description><exportable>true</exportable></cjs_info>@cjs_info");
info.appendChild(comment);
Element process = tDocument.createElement("process");
HciState[] toHciStateList = new HciState[hciStateList.getLength()];

for (int i = 0; i < hciStateList.getLength(); i ++) {
boolean isStart = false;
boolean isEnd = false; /*if (startPosition == i) {
isStart = true;
}*/
toHciStateList[i] = new HciState((Element) hciStateList.item(i), i, startTargetXmiId, isEnd);
hciStateIdlist.add(toHciStateList[i].getXmiId());//
}

for (int i = 0; i < nextList.getLength(); i ++) {
NodeList caseList = ((Element) nextList.item(i)).getElementsByTagName("case");
for (int j = 0; j < caseList.getLength();j ++) {
Case temp = new Case((Element) caseList.item(j));
if (temp.getFromTarget() > -1) {
/*if (temp.getTo() != null && 
temp.getTo().equals("//@end")) {  //这里需要改
//temp.setTo(Integer.toString(toHciStateList.length));
toHciStateList[temp.getFromTarget()].setIsEnd("true");
}*/

if (temp.getTo() != null && 
temp.getTo().equals(endXmiId)) {  //这里需要改
//temp.setTo(Integer.toString(toHciStateList.length));
toHciStateList[temp.getFromTarget()].setIsEnd("true");
}

if (toHciStateList[temp.getFromTarget()].getNext() == null) {
toHciStateList[temp.getFromTarget()].setNext(new Next());
}
toHciStateList[temp.getFromTarget()].getNext().addCase(temp);
}
}
}

for (int i = 0; i < toHciStateList.length; i ++) {
process.appendChild((Element) toHciStateList[i].toXml(tDocument));
}

root.appendChild(info);

if (startList.getLength() > 0) {
Node start = tDocument.importNode(startList.item(0), true);
root.appendChild(start);
}

if (endList.getLength() > 0) {
Node end = tDocument.importNode(endList.item(0), true);
root.appendChild(end);
}

root.appendChild(process); File targetFile = new File(targetFilePath);
if (!targetFile.exists()) {
File targetFolder = new File(targetFile.getParent());
if (!targetFolder.exists()) {
targetFolder.mkdirs();
}
targetFile.createNewFile();
}
StreamResult result = new StreamResult(
new OutputStreamWriter(
new FileOutputStream(targetFile), "UTF-8"));
TransformerFactory tFactory = TransformerFactory.newInstance();
tFactory.setAttribute("indent-number", 4);
Transformer transformer = null;
try {
transformer = tFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); DOMSource source = new DOMSource(root);
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (true);
}