【问题标题】:XML using SAX-writer in Progress 4Gl在 Progress 4Gl 中使用 SAX 编写器的 XML
【发布时间】:2017-02-03 06:34:49
【问题描述】:

我在 Progress 4GL 中使用 SAX-WRITER 创建了一个 XML 文件。 在记事本 ++ 中打开 XML 文件时,没有数据的结束标记出现在下一行,因此打印机拒绝该 XML 文件。 我已经在 notepad ++ 中安装了 XML 插件,但仍然没有运气。 如果没有相同的数据,我希望结束标记位于同一行。请参阅下面的标签 示例 -

<customer>
    <name> Test Name </name>
    <addr1> Address1  </addr1>
    <addr2> 
    </addr2>
    <addr3> Address3  </addr3>
    <dob>   25/02/1990 </dob>
 </customer>

【问题讨论】:

  • 请提出具体问题。
  • 请发布用于创建 XML 文件的 4GL 代码。还要提到 OpenEdge 版本。
  • 您确定输出到 addr2 的数据不是嵌入的(未编码的)换行符吗?
  • 问题在于标签的起始元素 - h:START-ELEMENT 将启动标签,而 h:END-ELEMENT 将在不同的行结束标签。因此,我使用写入数据处理了我的数据,以在同一行 h:WRITE-DATA-ELEMENT 中显示开始和结束标记

标签: xml sax progress-4gl


【解决方案1】:

检查您的数据是否有任何特殊字符。也许清理掉尾随的换行符、空格等?看起来你的 xml 包含很多标题和尾随空格(或者它只是你在帖子中写的内容)。

例如:

<dob>   25/02/1990 </dob>

应该很可能是:

<dob>25/02/1990</dob>

在下面的代码中,“换行符”数据元素包含一个换行符,它转换为与您发布的相同的行为。

DEFINE VARIABLE h AS HANDLE      NO-UNDO.
CREATE SAX-WRITER h.

h:SET-OUTPUT-DESTINATION("file", "c:\temp\sax.xml").

h:FORMATTED = TRUE.

h:START-DOCUMENT().

h:START-ELEMENT("customer").

h:WRITE-DATA-ELEMENT("name","Test name").
h:WRITE-DATA-ELEMENT("addr","Address1").
h:WRITE-DATA-ELEMENT("addr2","").
h:WRITE-DATA-ELEMENT("addr3","Adress3").
h:WRITE-DATA-ELEMENT("newline","~n").
h:WRITE-DATA-ELEMENT("spaces","         ").
h:WRITE-DATA-ELEMENT("dob", "25/02/1990").
h:END-ELEMENT("customer").
h:END-DOCUMENT().

DELETE OBJECT h.

sax.xml:

<?xml version="1.0"?>
<customer>
  <name>Test name</name>
  <addr>Address1</addr>
  <addr2></addr2>
  <addr3>Adress3</addr3>
  <newline>
</newline>
  <spaces>         </spaces>
  <dob>25/02/1990</dob>
</customer>

要删除尾随和标题空格,您可以使用TRIM 函数。

【讨论】:

  • 您好,感谢您的回复。问题出在标签的起始元素上。
  • 问题出在标签的开始元素上。 h:START-ELEMENT 将开始标签 h:END-ELEMENT 将在不同的行结束标签。我已经使用写入数据处理了我的数据,以在同一行中显示开始和结束标记 h:WRITE-DATA-ELEMENT
猜你喜欢
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2014-08-20
  • 2018-02-26
  • 2014-03-19
  • 2014-02-23
相关资源
最近更新 更多