XML to hierarchical table
I would like to convert XML in to a simple table structure, with:
- 1 row per tag
- a tag_id for each tag
- a parent tag_id for each tag
- the attribute for each tag
E.g. for the following
DROP TABLE test_xml;
CREATE TABLE test_xml OF XMLType;
INSERT INTO test_xml
VALUES
(XMLType
('<tag1>
<tag2_1>
<tag2_1_1 Value1="A">
<tag2_1_1_1 Value2="B" Value3="C"/>
</tag2_1_1>
<tag2_1_2 Value1="D">
<tag2_1_2_1 Value2="E" Value3="F"/>
</tag2_1_2>
<tag2_1_3 Value1="G">
<tag2_1_3_1 Value2="H" Value3="I"/>
</tag2_1_3>
<tag2_1_4 Value1="J">
<tag2_1_4_1 Value2="K" Value3="L"/>
</tag2_1_4>
</tag2_1>
<tag2_2>
<tag2_2_1 Value4="M"/>
</tag2_2>
<tag2_3>
<tag2_3_1 Value5="N">
<tag2_3_1_1>
<tag2_3_1_1_1>
<tag2_3_1_1_1_1 Value6="O" Value7="P">
<tag2_3_1_1_1_1_1 Value2="Q" Value3="R"/>
</tag2_3_1_1_1_1>
</tag2_3_1_1_1>
</tag2_3_1_1>
<tag2_3_1_2>
<tag2_3_1_2_1 Value8="S" Value9="T"/>
</tag2_3_1_2>
</tag2_3_1>
</tag2_3>
</tag1>'
set long 1000
select * from test_xml;
SYS_NC_ROWINFO$
<tag1>
<tag2_1>
<tag2_1_1 Value1="A">
<tag2_1_1_1 Value2="B" Value3="C"/>
</tag2_1_1>
<tag2_1_2 Value1="D">
<tag2_1_2_1 Value2="E" Value3="F"/>
</tag2_1_2>
<tag2_1_3 Value1="G">
<tag2_1_3_1 Value2="H" Value3="I"/>
</tag2_1_3>
<tag2_1_4 Value1="J">
<tag2_1_4_1 Value2="K" Value3="L"/>
</tag2_1_4>
</tag2_1>
<tag2_2>
<tag2_2_1 Value4="M"/>
</tag2_2>
<tag2_3>
<tag2_3_1 Value5="N">
<tag2_3_1_1>
<tag2_3_1_1_1>
<tag2_3_1_1_1_1 Value6="O" Value7="P">
<tag2_3_1_1_1_1_1 Value2="Q" Value3="R"/>
</tag2_3_1_1_1_1>
</tag2_3_1_1_1>
</tag2_3_1_1>
<tag2_3_1_2>
<tag2_3_1_2_1 Value8="S" Value9="T"/>
</tag2_3_1_2>
</tag2_3_1>
</tag2_3>
</tag1>I want to generate the following output
tag_id parent_tag_id tag_name attribute
1 tag1
2 1 tag2_1
3 2 tag2_1_1 Value1="A"
4 3 tag2_1_1_1 Value2="B" Value3="C"
5 2 tag2_1_2 Value1="D"
6 5 tag2_1_2_1 Value2="E" Value3="F"
7 2 tag2_1_3 Value1="G"
8 7 tag2_1_3_1 Value2="H" Value3="I"
9 2 tag2_1_4 Value1="J"
10 9 tag2_1_4_1 Value2="K" Value3="L"
11 1 tag2_2
12 11 tag2_2_1 Value4="M"
13 1 tag2_3
14 13 tag2_3_1 Value5="N"
15 14 tag2_3_1_1
16 15 tag2_3_1_1_1
17 16 tag2_3_1_1_1_1 Value6="O" Value7="P"
18 17 tag2_3_1_1_1_1_1 Value2="Q" Value3="R"
19 14 tag2_3_1_2
20 19 tag2_3_1_2_1 Value8="S" Value9="T"I can find lots of ways of converting data to XML but not much this other way round
In the actual code, the XML will be in a file - not sure how much of a difference to the solution..
Thanks,
Ben
Hi Ben,
Here's a first "working" solution, but certainly not the optimum considering the way I compute node IDs :
SQL> select * from v$version
2 ;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
SQL>
SQL> SELECT x.*
2 FROM test_xml t,
3 XMLTable(
4 'declare function local:getID($e as node()) as xs:integer
5 {
6 for $i at $j in $d/descendant::*
7 where $i is $e
8 return $j
9 }
10 ; declare function local:getChildren($e as node()) as element()*
11 {
12 for $i in $e/*
13 return element r
14 {
15 element tag_id {local:getID($i)},
16 element parent_tag_id {if (not($e is $d)) then local:getID($e) else()},
17 element tag_name {local-name($i)},
18 element attr_list {string-join(for $j in $i/@* return concat(local-name($j),''="'',$j,''"'')," ")}
19 }
20 | local:getChildren($i)
21 }; local:getChildren($d)'
22 passing t.object_value as "d"
23 columns tag_id number path 'tag_id',
24 parent_tag_id number path 'parent_tag_id',
25 tag_name varchar2(30) path 'tag_name',
26 attr_list varchar2(100) path 'attr_list'
27 ) x
28 ;
TAG_ID PARENT_TAG_ID TAG_NAME ATTR_LIST
1 tag1
2 1 tag2_1
3 2 tag2_1_1 Value1="A"
4 3 tag2_1_1_1 Value2="B" Value3="C"
5 2 tag2_1_2 Value1="D"
6 5 tag2_1_2_1 Value2="E" Value3="F"
7 2 tag2_1_3 Value1="G"
8 7 tag2_1_3_1 Value2="H" Value3="I"
9 2 tag2_1_4 Value1="J"
10 9 tag2_1_4_1 Value2="K" Value3="L"
11 1 tag2_2
12 11 tag2_2_1 Value4="M"
13 1 tag2_3
14 13 tag2_3_1 Value5="N"
15 14 tag2_3_1_1
16 15 tag2_3_1_1_1
17 16 tag2_3_1_1_1_1 Value6="O" Value7="P"
18 17 tag2_3_1_1_1_1_1 Value2="Q" Value3="R"
19 14 tag2_3_1_2
20 19 tag2_3_1_2_1 Value8="S" Value9="T"
20 rows selected
Do you really want attributes displayed that way?
Edited by: odie_63 on 23 mars 2011 13:04
Similar Messages
-
How can I use one hierarchical table as a node of another hierarchical tabl
I have a requirement where I have two hierarchical tables and one table should work as node for other table . How to achieve this??
To elaborate more the structure is like
Main Table (Company Structure)
Sub table Consolidation Groups which has got hierarchical structure
Sub table Entity which is also hierarchical.
The Entity table should act as a node for table Consolidation Groups
How can I achieve this functionality??
Thanks
Suvarnayou misunderstood me apparently. I said you can't organinze to tables so one serves as a node's value of the other. Let me show you wnat I suggested by an example.
First table has such values:
-A
|-B
|-C
and the second one is
-x
|-y
|-z
-p
|-r
|-s
I thought you wanted to confine relationships between them so fo B node be able to select only x's branch and for C - only p's branch. If it's similar to the truth then let's create another table with two fields. Field one points to table containing capital letters and field two - lower case letters. Both fields are of type lookup pointing to an hierachial tables. Now when you populate this table you'll create records like (I list two columns):
B - y
B - z
C - r
C - s
from your orinal table from now you should point to the above table. So instead of having two fields each pointing to its own table and compeling you to think how to organize two hierarchies, now you have only one field pointing to a table with all valid combinations. When you populate this table though YOU have to decide what such combinations are. It may make sense (if you have different users) to restrict access to this table on read-only level for regular users to preserve the valid combinations.
Hope it helps but if I understood your wrong give a concrete example. -
Query to read XML from CLOB table column
Hi
I want an SQL to get the following information extract from a CLOB table column.
MasterReport/sg:RptDef/sg:RptCell@RealDesc MasterReport/sg:RptDef/sg:RptCell@RealNum
credits 100
debits 100
Sample XML data from table column is:
<?xml version="1.0" encoding="UTF-8" ?>
<MasterReport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sg="http://www.oracle.com/fsg/2002-03-20/" xsi:schemaLocation="http://www.oracle.com/2002-03-20/fsg.xsd">
<sg:LDGName>Vision Portugal</sg:LDGName>
<sg:SOBName>Vision Portugal</sg:SOBName>
<sg:DataAccessSetName>Vision Portugal</sg:DataAccessSetName>
<sg:InternalReportName>Model 30 Report</sg:InternalReportName>
<sg:CustomParam10 />
<sg:RowContext RowId="r100001">
<sg:RowName />
<sg:RowLineItem>Litigation Credits- Total amount from previous period</sg:RowLineItem>
<sg:RowDispUnit>1</sg:RowDispUnit>
<sg:RowDispFormat />
<sg:RowUnitOfMeasure>EUR</sg:RowUnitOfMeasure>
<sg:RowLedgerCurrency>ANY</sg:RowLedgerCurrency>
<sg:RowCurrencyType>T</sg:RowCurrencyType>
<sg:RowChangeSign>0</sg:RowChangeSign>
<sg:RowSeq>1.0000000000000</sg:RowSeq>
</sg:RowContext>
<sg:RowContext RowId="r100002">
<sg:RowName />
<sg:RowLineItem>Litigation credits- Taxed amounts from column2 for Previous period</sg:RowLineItem>
<sg:RowDispUnit>1</sg:RowDispUnit>
<sg:RowDispFormat />
<sg:RowUnitOfMeasure>EUR</sg:RowUnitOfMeasure>
<sg:RowLedgerCurrency>ANY</sg:RowLedgerCurrency>
<sg:RowCurrencyType>T</sg:RowCurrencyType>
<sg:RowChangeSign>0</sg:RowChangeSign>
<sg:RowSeq>2.0000000000000</sg:RowSeq>
</sg:RowContext>
<sg:ColContext ColId="c1000">
<sg:ColAmountType />
<sg:ColPeriod />
<sg:ColPerOffset />
<sg:ColChangeSign />
<sg:ColPosition />
<sg:ColSeq />
<sg:ColWidth>100</sg:ColWidth>
</sg:ColContext>
<sg:ColContext ColId="c1001">
<sg:ColName>Total</sg:ColName>
<sg:ColDescr />
<sg:ColDispUnit>1</sg:ColDispUnit>
<sg:ColUnitOfMeasure>EUR</sg:ColUnitOfMeasure>
<sg:ColLedgerCurrency>ANY</sg:ColLedgerCurrency>
<sg:ColCurrencyType>T</sg:ColCurrencyType>
<sg:ColDispFormat>999999999.99</sg:ColDispFormat>
<sg:ColAmountType>YTD-Actual</sg:ColAmountType>
<sg:ColPerOffset>0</sg:ColPerOffset>
<sg:ColAmntId>14</sg:ColAmntId>
<sg:ColParamId>-1</sg:ColParamId>
<sg:ColType>A</sg:ColType>
<sg:ColStyle>B</sg:ColStyle>
<sg:ColPeriod>10-08</sg:ColPeriod>
<sg:ColPeriodYear>2008</sg:ColPeriodYear>
<sg:ColPeriodNum>11</sg:ColPeriodNum>
<sg:ColPeriodStart>2008-10-01T00:00:00</sg:ColPeriodStart>
<sg:ColPeriodEnd>2008-10-31T00:00:00</sg:ColPeriodEnd>
<sg:ColChangeSign>0</sg:ColChangeSign>
<sg:ColHeadLine1>Totals</sg:ColHeadLine1>
<sg:ColHeadLine2 />
<sg:ColHeadLine3 />
<sg:ColHeadLine4 />
<sg:ColHeadLine5 />
<sg:ColHeadLine6 />
<sg:ColHeadLine7 />
<sg:ColHeadLine8 />
<sg:ColHeadLine9 />
<sg:ColPosition>99</sg:ColPosition>
<sg:ColSeq>1.0000000000000</sg:ColSeq>
<sg:ColWidth>14</sg:ColWidth>
</sg:ColContext>
<sg:RptDef RptId="p1001" RptDetName="Ledger=Vision PT (Vision Portugal)" RptPESegm="" RptPEVal="" RptTabLabel="Output 1 (Vision PT)">
<sg:RptLine RptCnt="p1001" RowCnt="r100001" LineRowSeq="1.0000000000000" LinCnt="l100001">
<sg:RptCell ColCnt="c1000" RealDesc="debits">debits</sg:RptCell>
<sg:RptCell ColCnt="c1001" RealNum="100.000000">100.00</sg:RptCell>
</sg:RptLine>
<sg:RptLine RptCnt="p1001" RowCnt="r100002" LineRowSeq="2.0000000000000" LinCnt="l100002">
<sg:RptCell ColCnt="c1000" RealDesc="creditsd">credits</sg:RptCell>
<sg:RptCell ColCnt="c1001" RealNum="100.000000">100.00</sg:RptCell>
</sg:RptLine>
</sg:RptDef>
<sg:TabCount>1</sg:TabCount>
</MasterReport>
Please help me.
Regards
Giri
Edited by: user576087 on Mar 18, 2012 11:54 PMI'm not sure if you want the values from the attribute or the element, but this should give you a good start :
SQL> alter session set nls_numeric_characters = ".,";
Session altered
SQL>
SQL> select x.*
2 from my_table t
3 , xmltable(
4 xmlnamespaces('http://www.oracle.com/fsg/2002-03-20/' as "sg")
5 , '/MasterReport/sg:RptDef/sg:RptLine'
6 passing xmltype(t.xmldoc)
7 columns type varchar2(30) path 'sg:RptCell[1]'
8 , amount number path 'sg:RptCell[2]'
9 ) x
10 ;
TYPE AMOUNT
debits 100
credits 100 -
Can't Figure Out How To Import XML into a Table?
HELP!
I've been using InDesign for several years now... but everything Ive ever done has been basic one off layout concepts.
I am working on a website for a musical theater actress and for her resume, Id like to make a PDF which lists in table format the show, theatre and role she had for each job.
I could do this manually... but Id really like to learn how to just reuse the same XML data that I have for her website and import it into InDesign.
I have looked at Adobe's help file, I have scoured the internet, and I still can't figure it out... I have done like the adobe support file says... and I cant seem to get the values I create in her resume xml file to show up in a table I create in InDesign.
I even tried to simplify it for the learning process and did something as basic as an XML file that has 5 colors... couldnt even get that working.
So could someone explain it to me like Im a 5 year old... how to take a XML file, import it, place it in a table and have the data actually show up in the table.
thanks,
brianAre you sure you want to use XML with tables for this? No doubt importing XML into tables is useful for some specialized tasks, such as importing formatting information inside the XML itself, but for most of the familiar tasks that XML excels at, tables are neither necessary nor useful.
In my (limited) experience, if the XML elements are well-differentiated, by which I mean different types of data have their own distinctive tags, then the special powers of XML can be exploited more fully using the more familiar tagged text, nested tags etc. in ordinary text frames using paragraph breaks, tab characters, etc. to achieve a suitably "tabular" finished appearance.
If you must import XML into tables, I recommend Adobe's own PDF "Adobe InDesign CS3 and XML: A Technical Reference" availabe here:
http://www.adobe.com/designcenter/indesign/articles/indcs3ip_xmlrules.pdf
It sounds very daunting -- the words "technical reference" make me shudder -- but actually it's very readable and not very technical at all. Some nice pics and everything!
Jeremy -
How can i load Client side XML file to Table
Hi,
How can i load the all the XML files (near 10,000 files) available in client machine to the XML table .
I did try with directrory list in the Webutility demo form, but when the number of file is near to 1,500 its giving error.
Please suggest the best method to implement my requirements.
1. XML fies are in a folder in end users machine(Windows OS)
2. I need to load all the XML files to table (Oracle Database is in Unix)
I am using forms 10g
Thanks in advance.
RizlyHi,
What is the error you are getting when you reach 1,500 records? Can you post it? You mentioned you are using the webutil to load them. How you are loading? From the client machine you are loading to the database directly? Can you post the code you are using for that?
-Arun -
Migrate B-Tree Indexes of XML O-R Table to XMLIndex on Binary XML Table
We need slight help on how to migrate existing B-TREE Indexes from XML Obj-Rel Tables to XMLIndex on new XML Binary Tables
We use searches on Nested Collection Elements (defined unbounded in XSD)
and related DDL for XML Obj-Rel Tables is shown below:
CREATE TABLE TNMAB_AGREEMENT_XML
AGREEMENT_XML xmltype,
CREATE_BY VARCHAR2(15) NULL ,
CREATE_DT_GMT TIMESTAMP NULL ,
CREATE_CLIENT_ID VARCHAR2(65) NULL ,
UPDATE_BY VARCHAR2(15) NULL ,
UPDATE_DT_GMT TIMESTAMP NULL ,
UPDATE_CLIENT_ID VARCHAR2(65) NULL ,
PIC_VERSION_NUM NUMBER(20) NULL
XMLTYPE COLUMN AGREEMENT_XML XMLSCHEMA "AB_Agreement_V1_XMLDB.xsd" ELEMENT "Agreement"
VARRAY AGREEMENT_XML.XMLDATA."SHIPPING_PARTY_GROUPS"
STORE AS TABLE SHIPPING_PARTY_GROUPS_NT
(PRIMARY KEY (NESTED_TABLE_ID, ARRAY_INDEX) ENABLE)
VARRAY SHIPPING_PARTIES
STORE AS TABLE SHIPPING_PARTIES_NT
(PRIMARY KEY (NESTED_TABLE_ID, ARRAY_INDEX) ENABLE)
VARRAY AGREEMENT_XML.XMLDATA."SALES_OFFICE_CODES"."STRING_WRAPPERS"
STORE AS TABLE SALES_OFFICE_CODES_NT
(PRIMARY KEY (NESTED_TABLE_ID, ARRAY_INDEX) ENABLE)
TABLESPACE TNMAB_XMLDB_ME_DATA;
Table has PK and Unique Index which for the Binary XML Table, it will be setup on Virtual Columns (to enforce
Unique Constraints)
We have 6 more Normal Indexes on this Table, some created on Nested Elements as shown below:
-- 4 Normal B-TREE Indexes on Leaf level Elements
create index TNMAB_AGREEMENT_XML_IDX1 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."AGREEMENT_VERSION")
tablespace TNMAB_XMLDB_ME_INDX;
create index TNMAB_AGREEMENT_XML_IDX2 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."LAST_UPDATED_BY")
tablespace TNMAB_XMLDB_ME_INDX;
create index TNMAB_AGREEMENT_XML_IDX3 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."LAST_UPDATED")
tablespace TNMAB_XMLDB_ME_INDX;
create index TNMAB_AGREEMENT_XML_IDX4 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."CREATION_DATE")
tablespace TNMAB_XMLDB_ME_INDX;
--2 Indexes created on Nested Table (Collection)
create index TNMAB_AGREEMENT_XML_NT_IDX1 on SALES_OFFICE_CODES_NT NT(NT.STR_VAL, NT.NESTED_TABLE_ID)
tablespace TNMAB_XMLDB_ME_INDX;
create index TNMAB_AGREEMENT_XML_NT_IDX2 on SHIPPING_PARTIES_NT NT(NT.CUSTOMER_HOLDER.SAP_ID, NT.NESTED_TABLE_ID)
tablespace TNMAB_XMLDB_ME_INDX;
Could you please let us know how we should migrate above Indexes to XMLIndex format.
Specifically, not sure how the last 2 Indexes on Nested Tables is to be defined.
Any help or resources pointing to this would be greatly appreciated.
Thanks for the help,
AuroCan't tell due to using XMLDATA pseudocolumn. Would need a sample XML document structure that can be used to define the XPATH structure and ALSO need the database version you are using (ALL digits) to see if you would need / can use STRUCTURED or UNSTRUCTURED XMLINDEX indexes.
See the XML Index section (http://www.liberidu.com/blog/?page_id=441) on for guidance and/or of course the XMLDB Developers Guide for your database version
http://www.liberidu.com/blog/?page_id=441
XMLIndex (part 1) – The Concepts
XMLIndex (Part 2) – XMLIndex Path Subsetting
XMLIndex (Part 3) – XMLIndex Syntax Dissected
XMLIndex Performance and Fuzzy XPath Searches
Structured XMLIndex (Part 1) – Rules of Numb
Structured XMLIndex (Part 2) – Howto build a structured XMLIndex
Structured XMLIndex (Part 3) – Building Multiple XMLIndex Structures -
Transforming XML into Internal Table
Hi guys, I have tried a simple nested code but i fail to write in the Name, Phone and Email portion ... I manage to get to the header level... Can any one gimme some pointers?
PS: I have read to those threads posted here already before I got this far
<b><u>MAIN CODE</u></b>
REPORT ZTESTJASON11.
TYPES: BEGIN OF T_HEADER,
NAME(140),
PHONE(23),
EMAIL(100),
END OF T_HEADER,
D_HEADER TYPE T_HEADER OCCURS 0.
TYPES: BEGIN OF T_ITEM,
HEADER TYPE D_HEADER,
END OF T_ITEM,
D_ITEM TYPE T_ITEM OCCURS 0.
TYPES: BEGIN OF T_LIST,
ITEM TYPE D_ITEM,
END OF T_LIST,
D_LIST TYPE T_LIST OCCURS 0.
TYPES: BEGIN OF TYPE_DATA,
LIST TYPE D_LIST,
END OF TYPE_DATA.
DATA: RESPONSE TYPE TABLE OF TYPE_DATA.
DATA: XMLOUT TYPE STRING.
DATA: ITAB LIKE SOLI OCCURS 0 WITH HEADER LINE.
DATA: HEADER_WA TYPE T_HEADER,
HEADER_LN TYPE D_HEADER,
ITEM_WA TYPE T_ITEM,
ITEM_LN TYPE D_ITEM,
LIST_WA TYPE T_LIST,
LIST_LN TYPE D_LIST.
MOVE: 'JIM BEAN' TO HEADER_WA-NAME,
'+6512345678' TO HEADER_WA-PHONE,
'[email protected]' TO HEADER_WA-EMAIL.
APPEND HEADER_WA TO HEADER_LN.
ITEM_WA-HEADER = HEADER_LN.
APPEND ITEM_WA TO ITEM_LN.
LIST_WA-ITEM = ITEM_LN.
APPEND LIST_WA TO LIST_LN.
myXML-LIST = LIST_LN.
PERFORM UPLOAD_XML.
FORM UPLOAD_XML .
REFRESH ITAB.
clear RESPONSE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:test11.XML'
filetype = 'BIN'
TABLES
data_tab = ITAB.
LOOP AT ITAB.
CONCATENATE XMLOUT ITAB-LINE INTO XMLOUT.
ENDLOOP.
CALL TRANSFORMATION ('ZTEST11X2A')
SOURCE XML XMLOUT
RESULT RESPONSE = RESPONSE.
BREAK-POINT.
ENDFORM.
<b><u>XML CODE (test11.xml)</u></b>
<?xml version="1.0" encoding="iso-8859-1"?>
<myXML>
<LIST>
<ITEM>
<HEADER>
<NAME>JIM BEAN</NAME>
<PHONE>+6512345678</PHONE>
<EMAIL>[email protected]</EMAIL>
</HEADER>
</ITEM>
</LIST>
</myXML>
<b><u>XSLT CODE (ZTEST11X2A)</u></b>
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sap="http://www.sap.com/abapxml"
>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
<asx:values>
<RESPONSE>
<myXML>
<LIST>
<ITEM>
<xsl:for-each select="ITEM">
<I>
<HEADER>
<NAME> <xsl:value-of select="NAME"/> </NAME>
<PHONE> <xsl:value-of select="PHONE"/> </PHONE>
<EMAIL> <xsl:value-of select="EMAIL"/> </EMAIL>
</HEADER>
</I>
</xsl:for-each>
</ITEM>
</LIST>
</myXML>
</RESPONSE>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>Thanks a million in advance Raja, thanks for ur help, realli appreaciate it! ")
Here it is...
<u><b>MAIN CODE (itab declaration)</b></u>
REPORT ZTESTJASON11.
TYPES: BEGIN OF T_HEADER,
NAME(140),
PHONE(23),
EMAIL(100),
END OF T_HEADER,
D_HEADER TYPE T_HEADER OCCURS 0.
TYPES: BEGIN OF T_ITEM,
HEADER TYPE D_HEADER,
END OF T_ITEM,
D_ITEM TYPE T_ITEM OCCURS 0.
TYPES: BEGIN OF T_LIST,
ITEM TYPE D_ITEM,
END OF T_LIST,
D_LIST TYPE T_LIST OCCURS 0.
TYPES: BEGIN OF TYPE_DATA,
LIST TYPE D_LIST,
END OF TYPE_DATA.
DATA: RESPONSE TYPE TABLE OF TYPE_DATA.
DATA: XMLOUT TYPE STRING.
DATA: ITAB LIKE SOLI OCCURS 0 WITH HEADER LINE.
DATA: HEADER_WA TYPE T_HEADER,
HEADER_LN TYPE D_HEADER,
ITEM_WA TYPE T_ITEM,
ITEM_LN TYPE D_ITEM,
LIST_WA TYPE T_LIST,
LIST_LN TYPE D_LIST.
MOVE: 'JIM BEAN' TO HEADER_WA-NAME,
'+6512345678' TO HEADER_WA-PHONE,
'[email protected]' TO HEADER_WA-EMAIL.
APPEND HEADER_WA TO HEADER_LN.
ITEM_WA-HEADER = HEADER_LN.
APPEND ITEM_WA TO ITEM_LN.
LIST_WA-ITEM = ITEM_LN.
APPEND LIST_WA TO LIST_LN.
myXML-LIST = LIST_LN.
PERFORM UPLOAD_XML.
FORM UPLOAD_XML .
REFRESH ITAB.
clear RESPONSE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:test11.XML'
filetype = 'BIN'
TABLES
data_tab = ITAB.
LOOP AT ITAB.
CONCATENATE XMLOUT ITAB-LINE INTO XMLOUT.
ENDLOOP.
CALL TRANSFORMATION ('ZTEST11X2A')
SOURCE XML XMLOUT
RESULT RESPONSE = RESPONSE.
BREAK-POINT.
ENDFORM.
<u><b>XML CODE (test11.xml)</b></u>
<?xml version="1.0" encoding="iso-8859-1"?>
<myXML>
<LIST>
<ITEM>
<HEADER>
<NAME>JIM BEAN</NAME>
<PHONE>+6512345678</PHONE>
<EMAIL>[email protected]</EMAIL>
</HEADER>
</ITEM>
</LIST>
</myXML>
<u><b>XSLT CODE (ZTEST11X2A)</b></u>
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sap="http://www.sap.com/abapxml"
>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
<asx:values>
<RESPONSE>
<myXML>
<LIST>
<ITEM>
<xsl:for-each select="ITEM">
<dataset1>
<HEADER>
<xsl:for-each select="HEADER">
<dataset2>
<NAME>
<xsl:value-of select="NAME"/>
</NAME>
<PHONE>
<xsl:value-of select="PHONE"/>
</PHONE>
<EMAIL>
<xsl:value-of select="EMAIL"/>
</EMAIL>
</dataset2>
</xsl:for-each>
</HEADER>
</dataset1>
</xsl:for-each>
</ITEM>
</LIST>
</myXML>
</RESPONSE>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform> -
Indesign library drag drop looses xml attributes of Table tag
Hi all,
I have created a Table with 1 row and 3 coloumns, I have text in all 3 cells. I have attaced xml tags to cell text and after that I have added attibutes to Story tag, Table tag and Text tag. I have drag this table frame to Indesign library to save it for further use.
When I tried to drag it back to document the Table tag attributes are missing. This is happening on Indesign CS4 Win and Mac.
I have saved required information in the xml attributes of table tag and since its attributes are missing after drag from library I am not able to use library of Indesign.
Is this an issue with Indesign CS4?
-Rahul Dalvi.Hi All,
I am still waitng for the reply. I have attached 2 files here, first one is the Indesign document 'TableXMLTags.indd' having a tagged table. second one is the Library file 'TableXMLtagLibrary.indl' in which I have draged table from 'TableXMLTags.indd'. When I tried to drag that table from library to any document it just loses attributes of Table tag. Here each tag has 3 attributes attached to it.
I am using Indesign CS4 on Windows and Macintosh.
Please let me know if there is any way to avoid tag attribute loss.
Thanks,
Rahul Dalvi. -
Generating xml from diff tables in a db
hi,
i need to write a oracle procedure, which when called generates xml doc (building xml from different tables in database.). i got the DTDs . but i still dont understand how can the data be pulled from diff tables and put in the one xml? can anyone give me rough idea.. i know that i have to use xmlquery and xml_save packages... but still not much clear..
i m working on oracle 8i database. any help is appreciated.. thanks.Any feedback to the above questions would be greatly appreciated!
-
Loading this xml data into tables
Hello,
I am having a problem loading this XML file into tables. The xml file structure is
<FILE>
<ACCESSION>
some ids
<INSTANCE>
some data
<VARIATION
</VARIATION>
<VARIATION>
</VARIATION> variation gets repeated a number of times
<ASSEMBLY>
</ASSEMBLY>
<ASSEMBLY>
</ASSEMBLY> Assembly gets repeated a number of times.
</INSTANCE>
</ACCESSION>
</FILE>
I created a table which has the structure:
create table accession(
accession_id varchar2(20),
Instance instance_type);
create or replace type instance_type as object
(method varchar2(20),
class varchar2(20),
source varchar2(20),
num_char number(10),
variation variation_type,
assembly assembly_type)
create or replace type variation_type as object
(value varchar2(2),
count number(10),
frequency number(10),
pop_id varchar2(10)
Created a similiar type for assembly.
When I load it, I could only store the first variation data but not the subsequent ones. Similarly for assembly I could only store the first data but not the subsequent ones.
Could anyone let me know how I could store this data into tables? I have also included a sample XML file in this message.
Thank You for your help.
Rama.
Here is the sample xml file.
<?xml version="1.0" ?>
- <FILE>
- <ACCESSION>
<ACCESSION_ID>accid1</ACCESSION_ID>
- <INSTANCE>
<METHOD>method1</METHOD>
<CLASS>class1</CLASS>
<SOURCE>source1</SOURCE>
<NUM_CHAR>40</NUM_CHAR>
- <VARIATION>
<VALUE>G</VALUE>
<COUNT>5</COUNT>
<FREQUENCY>66</FREQUENCY>
<POP1>pop1</POP1>
<POP2>pop1</POP2>
</VARIATION>
<VARIATION>
<VALUE>C</VALUE>
<COUNT>2</COUNT>
<FREQUENCY>33</FREQUENCY>
<POP_ID1>pop2</POP_ID1>
</VARIATION>
- <ASSEMBLY>
<ASSEMBLY_ID>1</ASSEMBLY_ID>
<BEGIN>180</BEGIN>
<END>180</END>
<TYPE>2</TYPE>
<ORI>-</ORI>
<OFFSET>0</OFFSET>
</ASSEMBLY>
- <ASSEMBLY>
<ASSEMBLY_ID>2</ASSEMBLY_ID>
<BEGIN>235</BEGIN>
<END>235</END>
<TYPE>2</TYPE>
<ORI>-</ORI>
<OFFSET>0</OFFSET>
</ASSEMBLY>
</INSTANCE>
</ACCESSION>
</FILE>Hello,
I could figure out how to load this XML file by using cast(multiset(
So never mind.
Thank You.
Rama. -
Xml to Internal table : Issue
Dear All,
I have written a program to bring the data from xml to internal table Below is the strucutre of my xml file .
- <Data>
- <MT Type="CR">
<MatType>FERT</MatType>
</MT>
- <OP Type="CR">
<MatNumber>9901040103-000115</MatNumber>
- <Activities Element="AT">
- <AT Type="CR">
<MaterialNumber>115</MaterialNumber>
<ActivityType>DEPR.</ActivityType>
</AT>
- <AT Type="CR">
<MaterialNumber>117</MaterialNumber>
<ActivityType>L.C.R</ActivityType>
</AT>
</Activities>
</OP>
</Data>
.However I am not able to handle the multiple entries which comes together . ie
- <AT Type="CR">
<MaterialNumber>115</MaterialNumber>
<ActivityType>DEPR.</ActivityType>
</AT>
- <AT Type="CR">
<MaterialNumber>117</MaterialNumber>
<ActivityType>L.C.R</ActivityType>
</AT>
Please let me know how to handle this . Thanks!
Regards,
SyedHi ,
To convert XML data into internal table u have to use FM "SMUM_XML_PARSE", this FM takes XString as input ,so first u have to
convert ur xml string into XString using FM "SCMS_STRING_TO_XSTRING".
Thanks
jitendra -
XML Column from table extract to Pipe Delimited Text File
Hi,
I have an XML column with large data in a Table ( Source SQL server Database).
I was asked to extract XML column to .txt file using SSIS.
Is it possible to extract xml column with huge data to text file ?
when I tried, select XML column from Table in source , I noticed that Property of column is taken as [DT_NTEXT] . I Converted it to DT_TEXT as Ansi donot support DT_NTEXT.
Execution method was success but it failed due to trucation. so wondering is there a way to get XML column extracted to Pipe delimited text file?
Is it advisable to do this ? or IS It Valid to export XML in Pipe Delimited File ?
Please Kindly advice
thanks
kodiAre you looking at shredding data within XML nodes and then importing it to text file or are you looking at exporting XML value as is? Also is SSIS a necessity?
If not, You can simply use T-SQL for this along with bcp for this. just use a query like
EXEC xp_cmdshell 'bcp "SELECT CAST(XMLColumn AS varchar(max)) AS Column FROM table" queryout <full file path> -c -S <ServerName> -T -t |'
provided you use trusted connection (windows authentication)
see
http://visakhm.blogspot.in/2013/10/bcp-out-custom-format-data-to-flat-file.html
If you want to shred the data use Xpath functions in the query as below
http://visakhm.blogspot.in/2012/10/shred-data-as-well-as-metadata-from-xml.html
Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs -
Sql query, from xml to nested table
Hello!
I have DB table: my_table
It has 2 fields: file_id and file_data (it's clob with xml)
I need to write query that returns info from xml using nested table (Oracle v.9)
The number of rows witch will return query must be equal to number of files (file_id)
Structure of XML:
<?xml version = "1.0" encoding = "utf-8"?>
<head>
<AAA v1="a" v2="b">
<BBB p1="1" p2="2"/>
<BBB p1="3" p2="4"/>
</AAA>
<AAA v1="c" v2="d">
<BBB p1="5" p2="6"/>
<BBB p1="7" p2="8"/>
<BBB p1="9" p2="0"/>
</AAA>
</head>
I have query, witch works! but not optimally! each CLOB scaned 3 times - I want to scan it once!
SELECT an.file_id,
CAST(MULTISET(SELECT extract(VALUE(val2),'//@v1').getStringVal() v1,
extract(VALUE(val2),'//@v2').getStringVal() v2,
CAST(MULTISET(SELECT extract(VALUE(val3),'//@p1').getStringVal() p1,
extract(VALUE(val3),'//@p2').getStringVal() p2,
FROM TABLE (XMLSEQUENCE(XMLTYPE(an.file_data).EXTRACT('/head/AAA/BBB[../@v1='||extract(VALUE(val2),'//@v1').getStringVal()||']'))) val3) AS T_VAL3) info
FROM TABLE (XMLSEQUENCE(XMLTYPE(an.file_data).EXTRACT('/head/AAA'))) val2) AS T_VAL2) head
FROM (SELECT olr.*
FROM my_table olr,
TABLE (XMLSEQUENCE(XMLTYPE(file_data)).EXTRACT('/head'))) val1) an
PLEASE, help me to rewrite this query!I assume you're using nested objects like these to hold the result?
create type t_val3_rec as object ( p1 number, p2 number );
create type t_val3 as table of t_val3_rec;
create type t_val2_rec as object ( v1 varchar2(30), v2 varchar2(30), c1 t_val3 );
create type t_val2 as table of t_val2_rec;
/then this query should work :
SELECT t.file_id
, CAST(
MULTISET(
SELECT extractvalue(value(x1), '/AAA/@v1')
, extractvalue(value(x1), '/AAA/@v2')
, CAST(
MULTISET(
SELECT extractvalue(value(x2), '/BBB/@p1')
, extractvalue(value(x2), '/BBB/@p2')
FROM TABLE(XMLSequence(extract(value(x1), '/AAA/BBB'))) x2
AS t_val3
FROM TABLE(XMLSequence(extract(value(x), '/head/AAA'))) x1
AS t_val2
FROM my_table t
, TABLE(XMLSequence(extract(xmltype(t.file_data), '/head'))) x
; -
Generate xml using FOR XML PATH from table with hierarchy
I need to create xml from a table like:
EL1 EL2 EL3 Attr01 Attr02 Attr03 Attr04
E10, , ,a,b,c,d
E10,E1010, ,a,b,c,d
E10,E1010,E101010,a,b,c,d
E10,E1010,E101020,a,b,c,d
E10,E1010,E101030,a,b,c,d
E10,E1020, ,a,b,c,d
E10,E1020,E102010,a,b,c,d
E20, , ,a,b,c,d
E20,E2010, ,a,b,c,d
E20,E2010,E201010,a,b,c,d
E20,E2020, ,a,b,c,d
E20,E2020,E202010,a,b,c,d
E20,E2020,E202020,a,b,c,d
The hierarchy is EL1--EL2--EL3, and the 3 columns should be elements of xml;
The other for columns Attr01,Attr02,Attr03,Attr04 should be attributes of xml;
The actual table could have more than 500 rows(there are many values for El1,EL2,and EL3).
The expected xml should like:
<root>
<E10 Attr01="a" Attr02="b" Attr03="c" Attr04="d">
<E1010 Attr01="a" Attr02="b" Attr03="c" Attr04="d">
<E101010 Attr01="a" Attr02="b" Attr03="c" Attr04="d" />
<E101020 Attr01="a" Attr02="b" Attr03="c" Attr04="d" />
<E101030 Attr01="a" Attr02="b" Attr03="c" Attr04="d" />
</E1010>
<E1020 Attr01="a" Attr02="b" Attr03="c" Attr04="d">
<E102010 Attr01="a" Attr02="b" Attr03="c" Attr04="d" />
</E1020>
</E10>
<E20 Attr01="a" Attr02="b" Attr03="c" Attr04="d">
<E2010 Attr01="a" Attr02="b" Attr03="c" Attr04="d">
<E201010 Attr01="a" Attr02="b" Attr03="c" Attr04="d" />
</E2010>
<E2020 Attr01="a" Attr02="b" Attr03="c" Attr04="d">
<E202010 Attr01="a" Attr02="b" Attr03="c" Attr04="d" />
<E202020 Attr01="a" Attr02="b" Attr03="c" Attr04="d" />
</E2020>
</E20>
</root>
I create a sample Src table:
CREATE TABLE Src
EL1 VARCHAR(10),
EL2 VARCHAR(10),
EL3 VARCHAR(10),
Attr01 VARCHAR(10),
Attr02 VARCHAR(10),
Attr03 VARCHAR(10),
Attr04 VARCHAR(10)
GO
INSERT INTO Src
(EL1,EL2,EL3,Attr01,Attr02,Attr03,Attr04
SELECT 'E10','','','a','b','c','d'
UNION SELECT 'E10','E1010','','a','b','c','d'
UNION SELECT 'E10','E1010','E101010','a','b','c','d'
UNION SELECT 'E10','E1010','E101020','a','b','c','d'
UNION SELECT 'E10','E1010','E101030','a','b','c','d'
UNION SELECT 'E10','E1020','','a','b','c','d'
UNION SELECT 'E10','E1020','E102010','a','b','c','d'
UNION SELECT 'E20','','','a','b','c','d'
UNION SELECT 'E20','E2010','','a','b','c','d'
UNION SELECT 'E20','E2010','E201010','a','b','c','d'
UNION SELECT 'E20','E2020','','a','b','c','d'
UNION SELECT 'E20','E2020','E202010','a','b','c','d'
UNION SELECT 'E20','E2020','E202020','a','b','c','d'
GO
I tried to use FOR XML PATH to generate xml for the sample data. When the records increase to a few hundreds, it's not a good idea.
Here is my script:
SELECT
(SELECT Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
FROM Src
WHERE EL3 = 'E101010'
FOR XML PATH('E101010'),TYPE
) AS 'node()'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
FROM Src
WHERE EL3 = 'E101020'
FOR XML PATH('E101020'),TYPE
) AS 'node()'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
FROM Src
WHERE EL3 = 'E101030'
FOR XML PATH('E101030'),TYPE
) AS 'node()'
FROM Src
WHERE EL2 = 'E1010' AND (EL1 <>'' AND EL3 ='')
FOR XML PATH('E1010'),TYPE
) AS 'node()'--1010
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
FROM Src
WHERE EL3 = 'E102010'
FOR XML PATH('E102010'),TYPE
) AS 'node()'
FROM Src
WHERE EL2 = 'E1020' AND (EL1 <>'' AND EL3 ='')
FOR XML PATH('E1020'),TYPE
) AS 'node()'--1020
FROM Src
WHERE EL1 = 'E10' AND (EL2 ='' AND EL3 ='')
FOR XML PATH('E10'),TYPE) 'node()'
,(SELECT Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
FROM Src
WHERE EL3 = 'E201010'
FOR XML PATH('E201010'),TYPE
) AS 'node()'
FROM Src
WHERE EL2 = 'E2010' AND (EL1 <>'' AND EL3 ='')
FOR XML PATH('E2010'),TYPE
) AS 'node()'--2010
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
FROM Src
WHERE EL3 = 'E202010'
FOR XML PATH('E202010'),TYPE
) AS 'node()'
,( SELECT
Attr01 AS '@Attr01'
,Attr02 AS '@Attr02'
,Attr03 AS '@Attr03'
,Attr04 AS '@Attr04'
FROM Src
WHERE EL3 = 'E202020'
FOR XML PATH('E202020'),TYPE
) AS 'node()'
FROM Src
WHERE EL2 = 'E2020' AND (EL1 <>'' AND EL3 ='')
FOR XML PATH('E2020'),TYPE
FROM Src
WHERE EL1 = 'E20' AND (EL2 ='' AND EL3 ='')
FOR XML PATH('E20'),TYPE) AS 'node()'
FOR XML PATH(''),ROOT('root')
If I get a few hundreds of rows, how huge the script should be. Does anyone have better solution for this? Thanks.
TaowBob,
Thanks! And sorry for late feedback.
The XSD requires the xml structures like the following
<Schools>
<School01>Some school</School01>
<School02>Some other school</School02>
</Schools>
I have to use the number in the element name.
Right now I just use the nested FOR XML PATH, although I have to write thousand lines code.
Thanks anyway.
Tao
Tao -
Web Service XML Changes Return Table Field Names
I am writing a Web service to return a employee information from SAP using .Net Connector. My Webservice XML changes return table column names with few escape characters. Does anyone know why this happens? and How to prevent it?
Every column name is changed: e.g. PERS_NO to PERS_--5fNO
NCo -> 2.0
RFC- > Custom Function module
RFC Return Type -> ZFPSYNC
VS.Net -> VS Studio 2003, ( C# Web service)
Here is part of XML document:
<?xml version="1.0" encoding="utf-8" ?>
- <ArrayOfZFPSYNC xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
- <ZFPSYNC>
<PERS_5fNO>00100001</PERS_5fNO>
<PDS_5fEMPID>00054740</PDS_5fEMPID>
<SSN>001380261</SSN>
<NAME_--5fPFX />
<FIRST_5fNAME>Tuesday</FIRST_5fNAME>
<LAST_5fNAME>October</LAST_5fNAME>
<NAME_--5fSFX />
<PRIOR_5fNAME>Tuesday October</PRIOR_5fNAME>
<NICKNAME />
<CO_5fCODE>TAX</CO_5fCODE>
<CO_5fCODE_5fT>Tax LLP</CO_5fCODE_5fT>
<CO_5fCTRY>US</CO_5fCTRY>
<ORG_5fUNIT>50191687</ORG_5fUNIT>
<ORG_5fUNIT_5fT>Northeast Region Lead Tax</ORG_5fUNIT_5fT>
<EE_5fLEVEL>C1</EE_5fLEVEL>
<EE_5fLEVEL_5fT>Firm Director</EE_5fLEVEL_5fT>
<SRV_5fAREA>TAX</SRV_5fAREA>
<SRV_5fAREA_5fT>Tax</SRV_5fAREA_5fT>
<JOB_5fFAM>CS-TAX</JOB_5fFAM>
<JOB_5fFAM_5fT>CS - Tax</JOB_5fFAM_5fT>
<PER_5fAREA>BOSX</PER_5fAREA>
<PER_5fAREA_5fT>Boston-Berkeley St-TAX</PER_5fAREA_5fT>
<PER_5fADDR>200 Berkeley Street</PER_5fADDR>Please install patch from OSS note 506603. This should correct the problem.
Maybe you are looking for
-
ASA NAT/Traceroute Inside to Outside Issues
Hi All, Product in question: ASA5512-x in HA Active/Standby Failover mode When running a ping from the inside network to a device on the internet I recieve replies and all is good. However when running a traceroute from inside the network to a devic
-
Configure approval process in Appraisals - Performance Management
Hi Guys I am trying to configure the approval process. After the final appraisal by the manager, the appraisal forms hould go to the manager of the manager (next level manager) for approval. My queries: 1. Is the next level manager defined as further
-
What is maintanence level in screen layout for asset master record
hi everyboby, can anyone explian this when I'm defining screen layout for asset master record to make business area as required entry it was throwing msg like select maintanance level. what could be the reason?can anyone help me on this. thanks siri
-
I get an error message 'Cannot create session cookie'
Hello, This is the exact error message I receive: "Time: 2011-04-05 14:47:47 OUCU: zz767748 URL: /science.level1ayrf.s104/ TN: openmark @ ltsweb2 Status: 403 Title: Unable to create session cookie Message: In order to use this website you must enable
-
Exporting a large library with keywords
This is a rather particular question but I hope might be able to advise me. I have about 10000 pictures in my iPhoto library and I would like to be able to export them so that my local schools can search using keywords. They, however, do not have Mac