【发布时间】:2017-08-13 09:08:12
【问题描述】:
我需要帮助格式化这个 xml 文件,以便以逗号分隔的形式导入到表格中。我玩过 sed 和 awk,但这是一场斗争。
例子:
<requestID>224</requestID>,
<ErrorMessage>The following is required: PersonName </ErrorMessage>,
<?xml version="1.0" encoding="UTF-8"?><TCRMService xmlns="http://www.ibm.com/mdm/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/mdm/schema MDMDomains.xsd"><RequestControl><requestID>224</requestID><DWLControl></TCRMService>
<requestID>615</requestID>,
<ErrorMessage>The following is required: PersonName </ErrorMessage>,
<?xml version="1.0" encoding="UTF-8"?><TCRMService xmlns="http://www.ibm.com/mdm/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/mdm/schema MDMDomains.xsd"><RequestControl><requestID>224</requestID><DWLControl></TCRMService>
结果:
<requestID>224</requestID>,<ErrorMessage>The following is required: PersonName </ErrorMessage>,<?xml version="1.0" encoding="UTF-8"?><TCRMService xmlns="http://www.ibm.com/mdm/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/mdm/schema MDMDomains.xsd"><RequestControl><requestID>224</requestID><DWLControl></TCRMService>
<requestID>615</requestID>,<ErrorMessage>The following is required: PersonName </ErrorMessage>,<?xml version="1.0" encoding="UTF-8"?><TCRMService xmlns="http://www.ibm.com/mdm/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/mdm/schema MDMDomains.xsd"><RequestControl><requestID>224</requestID><DWLControl></TCRMService>
我已经能够在我想要的地方添加逗号
sed 's/ErrorMessage>$/ErrorMessage>,/; s/requestID>$/requestID>,/'
我认为删除标签会更好,但它也会删除所有空格。
tr -d ' \t' <grep.xml > test.xml
我不知道如何将一行移到上一行的末尾...
所以这部分工作......
awk '{if ($0 ~ /<ErrorMessage>,*/) { printf "%s", $0; getline var; printf "%s\n", var} else {print $0}}' test.xml
<requestID>260</requestID>,
<ErrorMessage>The following is required: PersonName</ErrorMessage>,<?xml version="1.0" encoding="UTF-8"?><TCRMService xmlns="http://www.ibm.com/mdm/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/mdm/schema MDMDomains.xsd"><RequestControl><requestID>260</requestID></TCRMService>
但现在我无法将 ErrorMessage 移动到 RequestID 行的末尾......
请注意,在 ErrorMessage 行中,requestID 也在同一行。我认为关键是在
上寻找模式匹配 </requestID>,
【问题讨论】:
-
请求 ID 615 来自哪里?
-
对不起,假设是615。每个requestID代表一个唯一的记录。
-
它仍然在两行显示 ID 224 的“请求控制”。
-
这实际上只是完整 xml 行中的示例文本。如果您愿意,我可以粘贴整行,但不想被太多信息淹没。
-
不不,有代表性的摘录就好了,但它必须具有代表性;)见minimal reproducible example。