【问题标题】:Renaming tags in XML output在 XML 输出中重命名标签
【发布时间】:2009-12-10 19:45:26
【问题描述】:

我有一些代码可以从一些表中生成 XML。我正在查询的表是从 XSD 文件生成的,该文件描述了我应该生成的 XML。问题是表和字段的名称遵循与架构中不同的命名约定 - 例如,架构中名为“personID”的元素在数据库表中将是“PRSN_ID”。为了生成输出,我的代码如下所示:

Select xmlelement("person",
         xmlelement("personID",PRSN_ID),
         xmlelement("personName",PRSN_NAM),
...

您可以想象,这开始变得乏味了。我正在寻找更好的解决方案。我知道我可以使用 xmlforest 为标签赋予与选定列相同的名称,我现在需要一种翻译方法。例如,如果我生成:

/*the full long list of columns names can be generated so it's an easy copy-paste:*/
select xmlelement("PRSN", xmlforest(PRSN_ID,PRSN_NAM,...

/*produces this:*/

<PRSN>
    <PRSN_ID>1<PRSN_ID/>
    <PRSN_NAM>BOB<PRSN_NAM/>
...

我需要把它翻译成这样:

<person>
    <personID>1</personID>
    <personName>BOB</personName>
...

我将如何在 Oracle PL/SQL 中进行这种翻译?我确实有一个生成的映射文件告诉我“PRSN_ID”应该被翻译成“personID”,我只是不确定最好的方法来继续这个。

【问题讨论】:

    标签: xml oracle plsql


    【解决方案1】:

    您不能在重命名列的表上创建视图。如果您将它们放在双引号中,Oracle 将使用大小写混合的列名

    SELECT PRSN_ID "personID"....
    FROM 
    

    【讨论】:

    • 呃……我怎么会错过呢? :P 是的,我可能最终会这样做(除非 DBA 对象为这些表创建 >90 个视图 - 不过我可能可以通过脚本来做到这一点)。谢谢你的想法!
    • 这是我的首选解决方案,但我无法在数据库上创建视图,所以现在我使用 Excel 宏来生成丑陋的选择语句,直到 DBA 可以创建视图。跨度>
    【解决方案2】:

    如果您有一个生成的映射文件说 PRSN_ID 应该是 personID,为什么不使用该映射信息生成您的第一个 SELECT 命令?

    如果该 SELECT 命令执行您想要的操作,生成它可以消除乏味。

    【讨论】:

    • 您的意思是动态生成查询?我想了想。当时看起来有点多(必须以某种方式从它所在的文本文件中提取映射信息),尽管我可能仍然会重新考虑它是否是最好看的选项。还有另一个团队可能希望输出中的名称与我们当前使用的名称不同,所以我认为最好在生成输出后进行翻译。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多