Commit e173d750 by Patryk Czarnik

Przykłady XML

parent 1e434adf
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- Komentarz -->
<rooms>
<room>
<number>2120</number>
<floor>1</floor>
<equipment projector="false" computers="false"/>
<seats>50</seats>
</room>
<room>
<number>3180</number>
<floor>2</floor>
<equipment projector="true" computers="false"/>
<seats>100</seats>
</room>
<room>
<number>3210</number>
<floor>2</floor>
<equipment />
<seats>30</seats>
</room>
<room>
<number>3220</number>
<floor>2</floor>
<equipment />
<seats>30</seats>
</room>
<room>
<number>3230</number>
<floor>2</floor>
<equipment />
<seats>30</seats>
</room>
<room>
<number>4070</number>
<floor>3</floor>
<equipment projector="true" computers="false"/>
<seats>50</seats>
</room>
<room>
<number>4030</number>
<floor>3</floor>
<equipment projector="true" computers="false"/>
<seats>30</seats>
</room>
<room>
<number>4420</number>
<floor>3</floor>
<equipment projector="true" computers="false"/>
<seats>80</seats>
</room>
<room>
<number>5440</number>
<floor>4</floor>
<equipment projector="true" computers="false"/>
<seats>80</seats>
</room>
</rooms>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Komentarz -->
<rooms xmlns="http://xml.mimuw.edu.pl/school">
<room>
<number>2120</number>
<floor>1</floor>
<equipment projector="false" computers="false"/>
<seats>50</seats>
</room>
<room>
<number>3180</number>
<floor>2</floor>
<equipment projector="true" computers="false"/>
<seats>100</seats>
</room>
<room>
<number>3210</number>
<floor>2</floor>
<equipment />
<seats>30</seats>
</room>
<room>
<number>3220</number>
<floor>2</floor>
<equipment />
<seats>30</seats>
</room>
<room>
<number>3230</number>
<floor>2</floor>
<equipment />
<seats>30</seats>
</room>
<room>
<number>4070</number>
<floor>3</floor>
<equipment projector="true" computers="false"/>
<seats>50</seats>
</room>
<room>
<number>4030</number>
<floor>3</floor>
<equipment projector="true" computers="false"/>
<seats>30</seats>
</room>
<room>
<number>4420</number>
<floor>3</floor>
<equipment projector="true" computers="false"/>
<seats>80</seats>
</room>
<room>
<number>5440</number>
<floor>4</floor>
<equipment projector="true" computers="false"/>
<seats>80</seats>
</room>
</rooms>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="school" type="School">
<xs:key name="kRoom">
<xs:selector xpath="rooms/room"/>
<xs:field xpath="number"/>
</xs:key>
<xs:keyref name="krMeetingRoom" refer="kRoom">
<xs:selector xpath="lectures/lecture/meetings/meeting"/>
<xs:field xpath="room"/>
</xs:keyref>
<xs:key name="kTeacher">
<xs:selector xpath="teachers/teacher"/>
<xs:field xpath="@teacher-id"/>
</xs:key>
<xs:keyref name="krTeacher" refer="kTeacher">
<xs:selector xpath="lectures/lecture/teacher"/>
<xs:field xpath="@teacher-id"/>
</xs:keyref>
<xs:key name="kStudent">
<xs:selector xpath="students/student"/>
<xs:field xpath="@student-id"/>
</xs:key>
<xs:keyref name="krStudent" refer="kStudent">
<xs:selector xpath="lectures/lecture/registered-students/student"/>
<xs:field xpath="@student-id"/>
</xs:keyref>
</xs:element>
<xs:element name="lecture" type="Lecture" />
<xs:element name="student" type="Student" />
<xs:element name="teacher" type="Teacher" />
<xs:element name="rooms">
<xs:complexType>
<xs:sequence>
<xs:element name="room" type="Room" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="School">
<xs:sequence>
<xs:element name="teachers">
<xs:complexType>
<xs:sequence>
<xs:element ref="teacher" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element ref="student" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="lectures">
<xs:complexType>
<xs:sequence>
<xs:element ref="lecture" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="rooms">
<xs:complexType>
<xs:sequence>
<xs:element name="room" type="Room" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Lecture">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:element name="program" type="LectureProgram" />
<xs:element name="teacher">
<xs:complexType>
<xs:attribute name="teacher-id" type="xs:token" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="registered-students">
<xs:complexType>
<xs:sequence>
<xs:element name="student" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="student-id" type="xs:token" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="meetings">
<xs:complexType>
<xs:sequence>
<xs:element name="meeting" type="Meeting" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="kUniqueTerms">
<xs:selector xpath="meeting" />
<xs:field xpath="dayOfWeek" />
<xs:field xpath="startTime" />
</xs:unique>
</xs:element>
</xs:sequence>
<xs:attribute name="usos-code" type="xs:token" />
</xs:complexType>
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="first-name" type="xs:string" maxOccurs="3" />
<xs:element name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Student">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="birth-date" type="xs:date" />
<xs:element name="identification" type="Identification">
</xs:element>
</xs:sequence>
<xs:attribute name="student-id" type="xs:token" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Teacher">
<xs:complexContent>
<xs:extension base="Person">
<xs:attribute name="teacher-id" type="xs:token" use="required"/>
<xs:attribute name="degree" type="Degree" use="required"/>
<xs:attribute name="guest" type="xs:boolean" use="optional" default="false" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Identification">
<xs:choice>
<xs:element name="PESEL" type="xs:string" />
<xs:sequence>
<xs:element name="passport-nr" type="xs:string" />
<xs:element name="country" type="xs:string" />
</xs:sequence>
</xs:choice>
</xs:complexType>
<xs:complexType name="LectureProgram">
<xs:sequence>
<xs:element name="item" type="xs:string" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Room">
<xs:sequence>
<xs:element name="number" type="xs:token"/>
<xs:element name="floor" type="Floor"/>
<xs:element name="equipment" type="RoomEquipment"/>
<xs:element name="seats" type="xs:unsignedShort" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="RoomEquipment">
<xs:sequence/>
<xs:attribute name="projector" type="xs:boolean" default="false"/>
<xs:attribute name="computers" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="Meeting">
<xs:sequence>
<xs:element name="dayOfWeek" type="WeekDay"/>
<xs:element name="startTime" type="xs:time"/>
<xs:element name="endTime" type="xs:time"/>
<xs:element name="room" type="xs:token"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Degree">
<xs:restriction base="xs:string">
<xs:enumeration value="MSc" />
<xs:enumeration value="PhD" />
<xs:enumeration value="Prof" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="WeekDay">
<xs:restriction base="xs:string">
<xs:enumeration value="Mon" />
<xs:enumeration value="Tue" />
<xs:enumeration value="Wed" />
<xs:enumeration value="Thu" />
<xs:enumeration value="Fri" />
<xs:enumeration value="Sat" />
<xs:enumeration value="Sun" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Floor">
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xml.mimuw.edu.pl/school"
xmlns:tns="http://xml.mimuw.edu.pl/school"
xmlns="http://xml.mimuw.edu.pl/school"
elementFormDefault="qualified">
<xs:element name="school" type="School">
<xs:key name="kRoom">
<xs:selector xpath="tns:rooms/tns:room"/>
<xs:field xpath="tns:number"/>
</xs:key>
<xs:keyref name="krMeetingRoom" refer="kRoom">
<xs:selector xpath="tns:lectures/tns:lecture/tns:meetings/tns:meeting"/>
<xs:field xpath="tns:room"/>
</xs:keyref>
<xs:key name="kTeacher">
<xs:selector xpath="tns:teachers/tns:teacher"/>
<xs:field xpath="@teacher-id"/>
</xs:key>
<xs:keyref name="krTeacher" refer="kTeacher">
<xs:selector xpath="tns:lectures/tns:lecture/tns:teacher"/>
<xs:field xpath="@teacher-id"/>
</xs:keyref>
<xs:key name="kStudent">
<xs:selector xpath="tns:students/tns:student"/>
<xs:field xpath="@student-id"/>
</xs:key>
<xs:keyref name="krStudent" refer="kStudent">
<xs:selector xpath="tns:lectures/tns:lecture/tns:registered-students/tns:student"/>
<xs:field xpath="@student-id"/>
</xs:keyref>
</xs:element>
<xs:element name="lecture" type="Lecture" />
<xs:element name="student" type="Student" />
<xs:element name="teacher" type="Teacher" />
<xs:element name="rooms">
<xs:complexType>
<xs:sequence>
<xs:element name="room" type="Room" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="School">
<xs:sequence>
<xs:element name="teachers">
<xs:complexType>
<xs:sequence>
<xs:element ref="teacher" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element ref="student" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="lectures">
<xs:complexType>
<xs:sequence>
<xs:element ref="lecture" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="rooms">
<xs:complexType>
<xs:sequence>
<xs:element name="room" type="Room" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Lecture">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:element name="program" type="LectureProgram" />
<xs:element name="teacher">
<xs:complexType>
<xs:attribute name="teacher-id" type="xs:token" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="registered-students">
<xs:complexType>
<xs:sequence>
<xs:element name="student" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="student-id" type="xs:token" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="meetings">
<xs:complexType>
<xs:sequence>
<xs:element name="meeting" type="Meeting" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="kUniqueTerms">
<xs:selector xpath="meeting" />
<xs:field xpath="dayOfWeek" />
<xs:field xpath="startTime" />
</xs:unique>
</xs:element>
</xs:sequence>
<xs:attribute name="usos-code" type="xs:token" />
</xs:complexType>
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="first-name" type="xs:string" maxOccurs="3" />
<xs:element name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Student">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="birth-date" type="xs:date" />
<xs:element name="identification" type="Identification">
</xs:element>
</xs:sequence>
<xs:attribute name="student-id" type="xs:token" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Teacher">
<xs:complexContent>
<xs:extension base="Person">
<xs:attribute name="teacher-id" type="xs:token" use="required"/>
<xs:attribute name="degree" type="Degree" use="required"/>
<xs:attribute name="guest" type="xs:boolean" use="optional" default="false" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Identification">
<xs:choice>
<xs:element name="PESEL" type="xs:string" />
<xs:sequence>
<xs:element name="passport-nr" type="xs:string" />
<xs:element name="country" type="xs:string" />
</xs:sequence>
</xs:choice>
</xs:complexType>
<xs:complexType name="LectureProgram">
<xs:sequence>
<xs:element name="item" type="xs:string" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Room">
<xs:sequence>
<xs:element name="number" type="xs:token"/>
<xs:element name="floor" type="Floor"/>
<xs:element name="equipment" type="RoomEquipment"/>
<xs:element name="seats" type="xs:unsignedShort" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RoomEquipment">
<xs:sequence/>
<xs:attribute name="projector" type="xs:boolean" default="true"/>
<xs:attribute name="computers" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="Meeting">
<xs:sequence>
<xs:element name="dayOfWeek" type="WeekDay"/>
<xs:element name="startTime" type="xs:time"/>
<xs:element name="endTime" type="xs:time"/>
<xs:element name="room" type="xs:token"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Degree">
<xs:restriction base="xs:string">
<xs:enumeration value="MSc" />
<xs:enumeration value="PhD" />
<xs:enumeration value="Prof" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="WeekDay">
<xs:restriction base="xs:string">
<xs:enumeration value="Mon" />
<xs:enumeration value="Tue" />
<xs:enumeration value="Wed" />
<xs:enumeration value="Thu" />
<xs:enumeration value="Fri" />
<xs:enumeration value="Sat" />
<xs:enumeration value="Sun" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Floor">
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<sklep>
<kategoria id-kategorii="herbata">
<nazwa>Herbata</nazwa>
<opis>Herbata jest dobra.</opis>
</kategoria>
<kategoria id-kategorii="kawa">
<nazwa>Kawa</nazwa>
<opis>Kawa podobno jest niezdrowa ze względu na zawartość <term>kofeiny</term>. Ale wielu ludzi się tym nie przejmuje.</opis>
</kategoria>
<kategoria id-kategorii="czeko">
<nazwa>Czekolada</nazwa>
</kategoria>
<towar id-kategorii="herbata" id-towaru="teekane-gold">
<nazwa>Teekane Gold 80 szt.</nazwa>
<opis>
Opis z <em>wyróżnieniem</em>, <term>pojęciem</term>, <rem>uwagą</rem> oraz <link href="http://pl.wikipedia.org">odnośnikiem</link>.
<br/>
Ten fragment ma być od nowej linii.
</opis>
<cena>12</cena>
<vat>23</vat>
<cena-promocyjna od="2011-11-17" do="2011-11-18">10.99</cena-promocyjna>
</towar>
<towar id-kategorii="czeko" id-towaru="milka-m">
<nazwa>Milka mleczna</nazwa>
<opis>
Niebieskie krowy dają czekoladę. Takie rzeczy tylko w niemieckich Alpach.
</opis>
<cena>2.50</cena>
<vat>23</vat>
</towar>
<towar id-kategorii="herbata" id-towaru="lipton100">
<nazwa>Lipton 100 szt.</nazwa>
<opis>
Herbata w żółtym pudełku <em>mieszczącym 100 sztuk</em>.<br/>
Opłacalny wybór.
</opis>
<cena>12</cena>
<vat>23</vat>
<cena-promocyjna od="2011-11-20" do="2011-11-21">10.99</cena-promocyjna>
<cena-promocyjna od="2011-11-10" do="2011-11-30">10.49</cena-promocyjna>
</towar>
<towar id-kategorii="herbata" id-towaru="lipton25">
<nazwa>Lipton 25 szt.</nazwa>
<opis>
Herbata w żółtym pudełku <em>mieszczącym 25 sztuk</em>.<br/>
<em><rem>Nieco mniej</rem> opłacalny wybór</em>.
</opis>
<cena>6.50</cena>
<vat>23</vat>
</towar>
<towar id-kategorii="kawa" id-towaru="jacobs-k">
<nazwa>Jacobs Krönung</nazwa>
<opis>
Królowa kawy od <link href="http://www.coffeemoose.pl/historia-firmy-jacobs">wielu lat</link>.
</opis>
<cena>21</cena>
<vat>23</vat>
<cena-promocyjna od="2011-11-18" do="2011-04-18">16</cena-promocyjna>
</towar>
<towar id-kategorii="herbata" id-towaru="dilmah">
<nazwa>Dilmah black tea</nazwa>
<opis>
Czarna herbata Dilmah. Klasyka smaku.
</opis>
<cena>16</cena>
<vat>23</vat>
<cena-promocyjna od="2011-11-12" do="2011-11-21">17</cena-promocyjna>
</towar>
<towar id-kategorii="kawa" id-towaru="tchibo">
<nazwa>Tchibo Family</nazwa>
<opis>
Ulubiona kawa rodzinna.<br/>
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
Ala ma kota a Ola ma psa. Ala z Olą lubią się jak pies z kotem.
</opis>
<cena>19</cena>
<vat>23</vat>
<cena-promocyjna od="2011-11-20" do="2011-11-21">16</cena-promocyjna>
</towar>
<towar id-kategorii="czeko" id-towaru="wedel-g">
<nazwa>Wedel gorzka</nazwa>
<opis>
Czekolada gorzka i twarda.<br/>
<rem>Uwaga na zęby</rem>
</opis>
<cena>2.20</cena>
<vat>23</vat>
<cena-promocyjna od="2011-11-14" do="2011-11-18">2.00</cena-promocyjna>
</towar>
<towar id-kategorii="czeko" id-towaru="wedel-m">
<nazwa>Wedel mleczna</nazwa>
<opis>
Jeśli ktoś lubi bardziej na słodko, czekolada mleczna będzie OK.
</opis>
<cena>2.20</cena>
<vat>23</vat>
<cena-promocyjna od="2011-11-20" do="2011-11-23">2.00</cena-promocyjna>
</towar>
<towar id-kategorii="herbata" id-towaru="ahmad">
<nazwa>Ahmad Tea</nazwa>
<opis>
Mocna czarna herbata dla wybrednych.
</opis>
<cena>13</cena>
<vat>23</vat>
</towar>
<towar id-kategorii="herbata" id-towaru="saga">
<nazwa>Saga</nazwa>
<opis>
Tania herbata dla oszczędnych. <rem>Jednak nie tak tania jak produkty w Biedronce.</rem>
</opis>
<cena>13</cena>
<vat>23</vat>
</towar>
</sklep>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="sklep"> <!-- asortyment sklepu -->
<xs:complexType>
<xs:sequence>
<xs:element name="kategoria" type="TKategoria" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="towar" type="TTowar" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:key name="KKategorieWSklepie">
<xs:selector xpath="kategoria"/>
<xs:field xpath="@id-kategorii"/>
</xs:key>
<xs:key name="KTowaryWSklepie">
<xs:selector xpath="towar"/>
<xs:field xpath="@id-towaru"/>
</xs:key>
<xs:keyref name="KKategorieZTowarow" refer="KKategorieWSklepie">
<xs:selector xpath="towar"/>
<xs:field xpath="@id-kategorii"/>
</xs:keyref>
</xs:element>
<xs:element name="cenniki"> <!-- zbiór cenników z różnych (w założeniu kolejnych) dat -->
<xs:complexType>
<xs:sequence>
<xs:element ref="cennik" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="KDatyWCennikach">
<xs:selector xpath="cennik"/>
<xs:field xpath="data"/>
</xs:unique>
</xs:element>
<xs:element name="cennik"> <!-- cennik z jednego dnia -->
<xs:complexType>
<xs:sequence>
<xs:element name="data" type="xs:date"/>
<xs:element name="towar" type="TTowar" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="KTowaryWCenniku">
<xs:selector xpath="towar"/>
<xs:field xpath="@id-towaru"/>
</xs:unique>
</xs:element>
<xs:complexType name="TKategoria">
<xs:sequence>
<xs:element name="nazwa" type="TNazwa"/>
<xs:element name="opis" type="TTekst" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id-kategorii" type="TId" use="required"/>
</xs:complexType>
<xs:complexType name="TTowar">
<xs:sequence>
<xs:element name="nazwa" type="TNazwa"/>
<xs:element name="opis" type="TTekst" minOccurs="0"/>
<xs:element name="cena" type="TKwota"/>
<xs:element name="vat" type="TVat"/>
<xs:element name="cena-promocyjna" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="TKwota">
<xs:attributeGroup ref="APrzedział"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id-towaru" type="TId" use="required"/>
<xs:attribute name="id-kategorii" type="TId"/>
</xs:complexType>
<xs:complexType name="TTekst" mixed="true">
<xs:group ref="GElementyTekstu" minOccurs="0" maxOccurs="unbounded"/>
</xs:complexType>
<xs:group name="GElementyTekstu">
<xs:choice>
<xs:element name="em" type="TTekst"/>
<xs:element name="rem" type="TTekst"/>
<xs:element name="term" type="TTekst"/>
<xs:element name="br">
<xs:complexType/>
</xs:element>
<xs:element name="link">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="href" type="xs:anyURI" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:group>
<xs:attributeGroup name="APrzedział">
<xs:attribute name="od" type="xs:date" use="required"/>
<xs:attribute name="do" type="xs:date" use="required"/>
</xs:attributeGroup>
<xs:simpleType name="TKwota">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TVat">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
<xs:fractionDigits value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TNazwa">
<xs:restriction base="xs:token">
<xs:minLength value="1"/>
<xs:maxLength value="120"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TId">
<xs:restriction base="xs:token">
<xs:minLength value="1"/>
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="kategoria"/>
<xsl:output method="html" encoding="utf-8"/>
<xsl:decimal-format
decimal-separator=","
grouping-separator=" "/>
<!-- Szablon dla korzenia, uruchamiany jako pierwszy -->
<xsl:template match="/">
<html>
<head>
<title>Sklep <xsl:value-of select="$kategoria"/></title>
<style type="text/css">
body { background-color: #DDDDDD}
.kat {background-color: #DDFFFF}
.tow { background-color: #FFFFDD}
.tow, .kat {
border: 2px outset #665500;
margin: 1em auto;
padding: 0.5em;
width: 400px;
}
h2 {
margin: 0 0 0.5em 0;
}
strong { color: red }
</style>
</head>
<body>
<xsl:apply-templates select="(sklep/kategoria | sklep/towar)
[@id-kategorii = $kategoria or not($kategoria)]"/>
</body>
</html>
</xsl:template>
<xsl:template match="kategoria">
<div class="kat" id="K{@id-kategorii}">
<xsl:apply-templates select="nazwa"/>
<xsl:apply-templates select="opis"/>
<xsl:for-each select="//towar[@id-kategorii = current()/@id-kategorii]">
<a href="#T{@id-towaru}">
<xsl:value-of select="nazwa"/>
</a>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</div>
</xsl:template>
<xsl:template match="towar">
<div class="tow" id="T{@id-towaru}">
<!-- Sami nadajemy kolejność wypisywanym elementom -->
<xsl:apply-templates select="nazwa"/>
<xsl:variable name="moja-kategoria" select="@id-kategorii"/>
<a href="#K{@id-kategorii}">
<xsl:value-of select="//kategoria[@id-kategorii = $moja-kategoria]/nazwa"/>
</a>
<!-- Albo bez zmiennej:
<xsl:value-of select="//kategoria[@id-kategorii = current()/@id-kategorii]/nazwa"/> -->
<br/>
Cena netto:
<xsl:call-template name="kwota">
<xsl:with-param name="wartość" select="cena"/>
</xsl:call-template>
<br />
Cena brutto:
<xsl:call-template name="kwota">
<xsl:with-param name="wartość" select="cena * (1 + vat div 100)"/>
</xsl:call-template>
<xsl:apply-templates select="opis"/>
</div>
</xsl:template>
<xsl:template match="nazwa">
<h2><xsl:apply-templates/></h2>
</xsl:template>
<xsl:template match="opis">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="em">
<strong><xsl:apply-templates/></strong>
</xsl:template>
<xsl:template match="term">
<dfn><xsl:apply-templates/></dfn>
</xsl:template>
<xsl:template match="link">
<a href="{@href}"><xsl:apply-templates/></a>
</xsl:template>
<xsl:template match="br">
<br/>
</xsl:template>
<xsl:template name="kwota">
<xsl:param name="wartość"/>
<xsl:value-of select="format-number($wartość, '0,00')"/>
</xsl:template>
</xsl:stylesheet>
package xml.pomoce;
import java.util.Arrays;
public class Args {
public static String[] argsOrDefault(String[] args, String... defaults) {
int length = Math.max(args.length, defaults.length);
String[] newArgs = Arrays.copyOf(args, length);
for(int i = 0; i < defaults.length; i++) {
if(newArgs[i] == null) {
newArgs[i] = defaults[i];
}
}
return newArgs;
}
}
package xml.pomoce;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class MojBrutalnyErrorHandler implements ErrorHandler {
@Override
public void warning(SAXParseException exception) throws SAXException {
System.err.println("![WARNING] "+exception.getMessage());
}
@Override
public void error(SAXParseException exception) throws SAXException {
System.err.println("![ERROR] "+exception.getMessage());
throw new SAXException("Blad walidacji.", exception);
}
@Override
public void fatalError(SAXParseException exception) throws SAXException {
System.err.println("![FATAL ERROR] "+exception.getMessage());
throw new SAXException("Blad ostateczny.", exception);
}
}
package xml.pomoce;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class MojErrorHandler implements ErrorHandler {
private boolean bylBlad = false;
public boolean czyBylBlad() {
return bylBlad;
}
@Override
public void warning(SAXParseException exception) throws SAXException {
System.err.println("![WARNING] "+exception.getMessage());
bylBlad = true;
}
@Override
public void error(SAXParseException exception) throws SAXException {
System.err.println("![ERROR] "+exception.getMessage());
bylBlad = true;
// ewentualnie bardziej brutalnie:
//throw new SAXException("Blad walidacji.", exception);
}
@Override
public void fatalError(SAXParseException exception) throws SAXException {
bylBlad = true;
System.err.println("![FATAL ERROR] "+exception.getMessage());
}
}
package xml.pomoce;
import java.util.Map;
import java.util.TreeMap;
public class Statystyki {
TreeMap<String, Integer> elementy = new TreeMap<>();
int dlugoscTekstow = 0;
int maxGlebokosc = 0;
public String wypisz() {
StringBuilder buf = new StringBuilder();
buf.append("Statystyki\n");
buf.append("Elementy:\n");
for(Map.Entry<String, Integer> wpis : elementy.entrySet()) {
buf.append(" ").append(wpis.getKey()).append(" - ").append(wpis.getValue()).append('\n');
}
buf.append("Dlugosc tekstow: ").append(dlugoscTekstow).append('\n');
buf.append("Maksymalna glebokosc: ").append(maxGlebokosc).append('\n');
return buf.toString();
}
public void dodajElement(String nazwa) {
Integer staraWartosc = elementy.get(nazwa);
int nowaWartosc;
if(staraWartosc == null)
nowaWartosc = 1;
else
nowaWartosc = staraWartosc + 1;
elementy.put(nazwa, nowaWartosc);
}
public void dodajTekst(int dlugosc) {
dlugoscTekstow += dlugosc;
}
public void zapamietajGlebokosc(int glebokosc) {
if(glebokosc > maxGlebokosc)
maxGlebokosc = glebokosc;
}
}
package xml.przyklady_dom;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.math.MathContext;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
public class DopiszBruttoDOM {
public static final String SKLEP_NS = "urn:sklep";
public static void main(String[] args) {
try {
String wej = "sklep_ns.xml";
String wyj = "sklep_zmieniony.xml";
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
fact.setNamespaceAware(true);
DocumentBuilder builder = fact.newDocumentBuilder();
Document doc = builder.parse(wej);
final Element sklep = doc.getDocumentElement();
final NodeList listaTowarow = sklep.getElementsByTagNameNS(SKLEP_NS, "towar");
for(int j = 0; j < listaTowarow.getLength(); ++j) {
final Element towar = (Element)listaTowarow.item(j);
final NodeList listaZCena = towar.getElementsByTagNameNS(SKLEP_NS, "cena");
final String cenaString = listaZCena.item(0).getTextContent();
final BigDecimal cena = new BigDecimal(cenaString);
final NodeList listaZVatem = towar.getElementsByTagNameNS(SKLEP_NS, "vat");
final Element elementVAT = (Element)listaZVatem.item(0);
final String vatString = elementVAT.getTextContent();
final BigDecimal vat = new BigDecimal(vatString);
// cena * (1 + vat / 100);
final BigDecimal cenaBrutto = cena.multiply(BigDecimal.ONE.add(vat.divide(new BigDecimal(100))));
final BigDecimal cenaBruttoZaokr = cenaBrutto.setScale(2, BigDecimal.ROUND_HALF_UP);
final String cenaBruttoString = cenaBruttoZaokr.toString();
final Element elementCenaBrutto = doc.createElementNS(SKLEP_NS, "cena-brutto");
//towar.appendChild(elementCenaBrutto);
towar.insertBefore(elementCenaBrutto, elementVAT);
final Text wciecie = doc.createTextNode("\n ");
towar.insertBefore(wciecie, elementVAT);
elementCenaBrutto.setTextContent(cenaBruttoString);
}
DOMImplementation domImpl = builder.getDOMImplementation();
DOMImplementationLS lsImpl = (DOMImplementationLS)domImpl.getFeature("LS", "3.0");
// if(lsImpl == null) { BLAD }
LSSerializer ser = lsImpl.createLSSerializer();
LSOutput output = lsImpl.createLSOutput();
output.setByteStream(new FileOutputStream(wyj));
output.setEncoding("utf-8");
ser.write(doc, output);
System.out.println("Gotowe");
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_dom;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
import xml.pomoce.MojErrorHandler;
public class DopiszBruttoDOM_Walidacja {
public static final String SKLEP_NS = "urn:sklep";
public static void main(String[] args) {
try {
if(args.length < 2) {
System.out.println("Za mało argumentów");
return;
}
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new StreamSource("sklep_ns.xsd"));
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
fact.setNamespaceAware(true);
fact.setSchema(schema);
DocumentBuilder builder = fact.newDocumentBuilder();
MojErrorHandler eh = new MojErrorHandler();
builder.setErrorHandler(eh);
Document doc = builder.parse(args[0]);
if(eh.czyBylBlad()) {
System.out.println("Blad podczas parsowania, nie dzialam dalej.");
return;
}
final Element sklep = doc.getDocumentElement();
final NodeList listaTowarow = sklep.getElementsByTagNameNS(SKLEP_NS, "towar");
for(int j = 0; j < listaTowarow.getLength(); ++j) {
final Element towar = (Element)listaTowarow.item(j);
final NodeList listaZCena = towar.getElementsByTagNameNS(SKLEP_NS, "cena");
final String cenaString = listaZCena.item(0).getTextContent();
final BigDecimal cena = new BigDecimal(cenaString);
final NodeList listaZVatem = towar.getElementsByTagNameNS(SKLEP_NS, "vat");
final Element elementVAT = (Element)listaZVatem.item(0);
final String vatString = elementVAT.getTextContent();
final BigDecimal vat = new BigDecimal(vatString);
// cena * (1 + vat / 100);
final BigDecimal cenaBrutto = cena.multiply(BigDecimal.ONE.add(vat.divide(new BigDecimal(100))));
final BigDecimal cenaBruttoZaokr = cenaBrutto.setScale(2, BigDecimal.ROUND_HALF_UP);
final String cenaBruttoString = cenaBruttoZaokr.toString();
final Element elementCenaBrutto = doc.createElementNS(SKLEP_NS, "cena-brutto");
//towar.appendChild(elementCenaBrutto);
towar.insertBefore(elementCenaBrutto, elementVAT);
final Text wciecie = doc.createTextNode("\n ");
towar.insertBefore(wciecie, elementVAT);
elementCenaBrutto.setTextContent(cenaBruttoString);
}
Validator validator = schema.newValidator();
MojErrorHandler eh2 = new MojErrorHandler();
validator.setErrorHandler(eh2);
validator.validate(new DOMSource(doc));
if(eh2.czyBylBlad()) {
System.out.println("Blad podczas walidacji, nie zapisuje pliku.");
return;
}
DOMImplementation domImpl = builder.getDOMImplementation();
DOMImplementationLS lsImpl = (DOMImplementationLS)domImpl.getFeature("LS", "3.0");
// if(lsImpl == null) { BLAD }
LSSerializer ser = lsImpl.createLSSerializer();
LSOutput output = lsImpl.createLSOutput();
output.setByteStream(new FileOutputStream(args[1]));
output.setEncoding("iso-8859-2");
ser.write(doc, output);
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_dom;
import java.math.BigDecimal;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class NajtanszyTowarDOM {
public static void main(String[] args) {
try {
if(args.length < 1) {
System.out.println("Za mało argumentów");
return;
}
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fact.newDocumentBuilder();
Document doc = builder.parse(args[0]);
final Element sklep = doc.getDocumentElement();
final NodeList listaKategorii = sklep.getElementsByTagName("kategoria");
final NodeList listaTowarow = sklep.getElementsByTagName("towar");
for(int i = 0; i < listaKategorii.getLength(); ++i) {
final Element kategoria = (Element)listaKategorii.item(i);
final NodeList listaZNazwa = kategoria.getElementsByTagName("nazwa");
final Element elementNazwa = (Element)listaZNazwa.item(0);
final String nazwaKategorii = elementNazwa.getTextContent();
final String idKategorii = kategoria.getAttribute("id-kategorii");
System.out.println("\nKategoria "+nazwaKategorii + " (id="+idKategorii+")");
BigDecimal cenaMinimalna = new BigDecimal(Integer.MAX_VALUE);
String najtanszyTowar = null;
for(int j = 0; j < listaTowarow.getLength(); ++j) {
final Element towar = (Element)listaTowarow.item(j);
final String idKategoriiT = towar.getAttribute("id-kategorii");
if(idKategoriiT.equals(idKategorii)) {
final NodeList listaZNazwaT = towar.getElementsByTagName("nazwa");
final Element elementNazwaT = (Element)listaZNazwaT.item(0);
final String nazwaTowaru = elementNazwaT.getTextContent();
//final String nazwaTInaczej = towar.getElementsByTagName("nazwa").item(0).getTextContent();
//System.out.println("Towar: "+nazwaTowaru);
final NodeList listaZCena = towar.getElementsByTagName("cena");
final String cenaString = listaZCena.item(0).getTextContent();
final BigDecimal cena = new BigDecimal(cenaString);
//System.out.println(" cena = "+cena);
if(cena.compareTo(cenaMinimalna) < 0) {
cenaMinimalna = cena;
najtanszyTowar = nazwaTowaru;
}
}
}
System.out.println("Najtanszy towar: "+najtanszyTowar+", cena: "+cenaMinimalna);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_dom;
import java.math.BigDecimal;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class NajtanszyTowarDOM_NS {
public static final String SKLEP_NS = "urn:sklep";
public static void main(String[] args) {
try {
if(args.length < 1) {
System.out.println("Za mało argumentów");
return;
}
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
fact.setNamespaceAware(true);
DocumentBuilder builder = fact.newDocumentBuilder();
Document doc = builder.parse(args[0]);
final Element sklep = doc.getDocumentElement();
final NodeList listaKategorii = sklep.getElementsByTagNameNS(SKLEP_NS, "kategoria");
final NodeList listaTowarow = sklep.getElementsByTagNameNS(SKLEP_NS, "towar");
for(int i = 0; i < listaKategorii.getLength(); ++i) {
final Element kategoria = (Element)listaKategorii.item(i);
final NodeList listaZNazwa = kategoria.getElementsByTagNameNS(SKLEP_NS, "nazwa");
final Element elementNazwa = (Element)listaZNazwa.item(0);
final String nazwaKategorii = elementNazwa.getTextContent();
final String idKategorii = kategoria.getAttributeNS(null, "id-kategorii");
System.out.println("\nKategoria "+nazwaKategorii + " (id="+idKategorii+")");
BigDecimal cenaMinimalna = new BigDecimal(Integer.MAX_VALUE);
String najtanszyTowar = null;
for(int j = 0; j < listaTowarow.getLength(); ++j) {
final Element towar = (Element)listaTowarow.item(j);
final String idKategoriiT = towar.getAttributeNS(null, "id-kategorii");
if(idKategoriiT.equals(idKategorii)) {
final NodeList listaZNazwaT = towar.getElementsByTagNameNS(SKLEP_NS, "nazwa");
final Element elementNazwaT = (Element)listaZNazwaT.item(0);
final String nazwaTowaru = elementNazwaT.getTextContent();
//final String nazwaTInaczej = towar.getElementsByTagName("nazwa").item(0).getTextContent();
//System.out.println("Towar: "+nazwaTowaru);
final NodeList listaZCena = towar.getElementsByTagNameNS(SKLEP_NS, "cena");
final String cenaString = listaZCena.item(0).getTextContent();
final BigDecimal cena = new BigDecimal(cenaString);
//System.out.println(" cena = "+cena);
if(cena.compareTo(cenaMinimalna) < 0) {
cenaMinimalna = cena;
najtanszyTowar = nazwaTowaru;
}
}
}
System.out.println("Najtanszy towar: "+najtanszyTowar+", cena: "+cenaMinimalna);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_dom;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import xml.pomoce.Statystyki;
public class StatystykiDOM {
public static void main(String[] args) {
try {
if(args.length < 1) {
System.out.println("Za mało argumentów");
return;
}
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fact.newDocumentBuilder();
Document doc = builder.parse(args[0]);
Statystyki statystyki = wyliczStatystyki(doc);
System.out.println(statystyki.wypisz());
} catch(Exception e) {
e.printStackTrace();
}
}
private static Statystyki wyliczStatystyki(Document doc) {
Statystyki statystyki = new Statystyki();
dodajDoStatystyk(statystyki, doc, 0);
return statystyki;
}
private static void dodajDoStatystyk(Statystyki stat, Node node, int glebokosc) {
/* To jest dobre, gdy sprawdzamy glebokosc dla jednego wezla.
* Przy przetwarzaniu rekurencyjnym lepiej przekazywac sobie glebokosc w parametrze.
int glebokosc = 0;
for(Node wgore = node; wgore != null; wgore = wgore.getParentNode()) {
glebokosc++;
} */
stat.zapamietajGlebokosc(glebokosc);
switch(node.getNodeType()) {
case Node.ELEMENT_NODE :
stat.dodajElement(node.getNodeName());
case Node.DOCUMENT_NODE :
for(Node dziecko = node.getFirstChild(); dziecko != null; dziecko = dziecko.getNextSibling())
dodajDoStatystyk(stat, dziecko, glebokosc+1);
break;
case Node.TEXT_NODE :
stat.dodajTekst(node.getNodeValue().length());
break;
}
}
}
package xml.przyklady_dom;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import xml.pomoce.Statystyki;
public class WypisywaczDOM {
public static void main(String[] args) {
try {
if(args.length < 1) {
System.out.println("Za mało argumentów");
return;
}
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fact.newDocumentBuilder();
Document doc = builder.parse(args[0]);
System.out.println("Wczytano dokument");
Statystyki statystyki = wyliczStatystyki(doc);
System.out.println(statystyki.wypisz());
} catch(Exception e) {
e.printStackTrace();
}
}
private static Statystyki wyliczStatystyki(Document doc) {
Statystyki statystyki = new Statystyki();
dodajDoStatystyk(statystyki, doc);
return statystyki;
}
private static void dodajDoStatystyk(Statystyki stat, Node nd) {
switch(nd.getNodeType()) {
case Node.DOCUMENT_NODE :
System.out.println("Jestem w korzeniu");
for(Node dziecko = nd.getFirstChild(); dziecko != null; dziecko = dziecko.getNextSibling())
dodajDoStatystyk(stat, dziecko);
break;
case Node.ELEMENT_NODE :
System.out.println("Jestem w elemencie "+nd.getNodeName());
for(Node dziecko = nd.getFirstChild(); dziecko != null; dziecko = dziecko.getNextSibling())
dodajDoStatystyk(stat, dziecko);
System.out.println("Koniec elementu "+nd.getNodeName());
break;
case Node.TEXT_NODE :
System.out.println("Jestem w tekście ["+nd.getNodeValue()+"] elementu "+
nd.getParentNode().getNodeName());
break;
}
}
}
package xml.przyklady_sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.XMLFilterImpl;
public class FiltrKategorii extends XMLFilterImpl {
private final String idKategorii;
private boolean czyPrzepuszczac = true;
public FiltrKategorii(String id) {
idKategorii = id;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
if("kategoria".equals(qName) || "towar".equals(qName)) {
String mojaKategoria = atts.getValue("id-kategorii");
if(idKategorii.equals(mojaKategoria)) {
czyPrzepuszczac = true;
} else {
czyPrzepuszczac = false;
}
}
if(czyPrzepuszczac)
super.startElement(uri, localName, qName, atts);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(czyPrzepuszczac)
super.endElement(uri, localName, qName);
if("kategoria".equals(qName) || "towar".equals(qName)) {
czyPrzepuszczac = true;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(czyPrzepuszczac)
super.characters(ch, start, length);
//Rownowazne:
//if(this.getContentHandler() != null)
// this.getContentHandler().characters(ch, start, length);
}
}
package xml.przyklady_sax;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class Przefiltruj {
public static void main(String[] args) {
if(args.length < 3) {
System.out.println("Za malo argumentow. Podaj nazwe pliku-wej, pliku-wyj i idKategorii.");
return;
}
try {
XMLReader reader = XMLReaderFactory.createXMLReader();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
FiltrKategorii filtr = new FiltrKategorii(args[2]);
filtr.setParent(reader);
InputSource wejscie = new InputSource(args[0]);
SAXSource src = new SAXSource(filtr, wejscie);
StreamResult res = new StreamResult(args[1]);
transformer.transform(src, res);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SredniaCenaHandler_Nieporzadnie extends DefaultHandler {
private boolean czyWCenie = false;
private double suma = 0.0;
private int liczba = 0;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("cena".equals(qName)) {
czyWCenie = true;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
czyWCenie = false;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(czyWCenie) {
final String cenaString = new String(ch, start, length);
suma += Double.parseDouble(cenaString);
++liczba;
}
}
public String wypisz() {
double srednia = suma / liczba;
return "Srednia cena wynosi "+srednia;
}
}
package xml.przyklady_sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SredniaCenaHandler_Porzadniej extends DefaultHandler {
private boolean czyWCenie = false;
private double suma = 0.0;
private int liczba = 0;
private StringBuilder buf;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("cena".equals(qName)) {
czyWCenie = true;
buf = new StringBuilder();
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(czyWCenie) {
final String cenaString = buf.toString();
suma += Double.parseDouble(cenaString);
++liczba;
buf = null;
czyWCenie = false;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(czyWCenie) {
buf.append(ch, start, length);
}
}
public String wypisz() {
double srednia = suma / liczba;
return "Srednia cena wynosi "+srednia;
}
}
package xml.przyklady_sax;
import javax.xml.XMLConstants;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import xml.pomoce.MojBrutalnyErrorHandler;
public class SredniaCena_SAX {
public static void main(String[] args) {
if(args.length < 1) {
System.out.println("Za malo argumentow. Podaj nazwe pliku.");
return;
}
try {
SredniaCenaHandler_Porzadniej mojHandler = new SredniaCenaHandler_Porzadniej();
MojBrutalnyErrorHandler eh = new MojBrutalnyErrorHandler();
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new StreamSource("sklep.xsd"));
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setSchema(schema);
SAXParser parser = spf.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.setContentHandler(mojHandler);
reader.setErrorHandler(eh);
reader.parse(args[0]);
System.out.println(mojHandler.wypisz());
} catch (SAXException e) {
System.out.println("Blad parsowania.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_sax;
import javax.xml.XMLConstants;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import xml.pomoce.MojBrutalnyErrorHandler;
public class SredniaCena_SAX_ZaPomocaFiltra {
public static void main(String[] args) {
if(args.length < 2) {
System.out.println("Za malo argumentow. Podaj nazwe pliku i idKategorii.");
return;
}
try {
SredniaCenaHandler_Porzadniej mojHandler = new SredniaCenaHandler_Porzadniej();
MojBrutalnyErrorHandler eh = new MojBrutalnyErrorHandler();
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new StreamSource("sklep.xsd"));
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setSchema(schema);
SAXParser parser = spf.newSAXParser();
XMLReader reader = parser.getXMLReader();
FiltrKategorii filtr = new FiltrKategorii(args[1]);
filtr.setParent(reader); // to wewnetrznie spowoduje wywolanie reader.setContentHandler(filtr)
filtr.setContentHandler(mojHandler);
filtr.setErrorHandler(eh); // mniej istotne
filtr.parse(args[0]); // to wewnetrznie spowoduje wywolanie reader.parse
System.out.println(mojHandler.wypisz());
} catch (SAXException e) {
System.out.println("Blad parsowania.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import xml.pomoce.Statystyki;
public class StatystykiHandler extends DefaultHandler {
private final Statystyki statystyki = new Statystyki();
private int glebokosc = 0;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//System.out.println("Wchodze do elementu "+qName);
statystyki.dodajElement(qName);
++glebokosc;
statystyki.zapamietajGlebokosc(glebokosc);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//System.out.println("Wychodze z elementu "+qName);
--glebokosc;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
statystyki.dodajTekst(length);
String napis = new String(ch, start, length);
}
public String wypisz() {
return statystyki.wypisz();
}
}
package xml.przyklady_sax;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class StatystykiSAX {
public static void main(String[] args) {
if(args.length < 1) {
System.out.println("Za malo argumentow. Podaj nazwe pliku.");
return;
}
try {
StatystykiHandler mojHandler = new StatystykiHandler();
/* Inny sposob tworzenia parsera SAX:
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser parser = sf.newSAXParser();
parser.parse(args[0], mojHandler);
*/
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(mojHandler);
reader.parse(args[0]);
System.out.println(mojHandler.wypisz());
} catch (Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_stax;
import javax.xml.namespace.QName;
import javax.xml.stream.EventFilter;
import javax.xml.stream.events.XMLEvent;
public class FiltrKategorii_Stax implements EventFilter {
private static final QName TOWAR = new QName("urn:sklep", "towar");
private static final QName IDKAT = new QName(null, "id-kategorii");
private boolean czyPrzepuszczac = true;
private String idKategorii;
public FiltrKategorii_Stax(String id) {
idKategorii = id;
}
@Override
public boolean accept(XMLEvent event) {
switch (event.getEventType()) {
case XMLEvent.START_ELEMENT:
if(event.asStartElement().getName().equals(TOWAR)) {
String mojaKategoria = event.asStartElement().getAttributeByName(IDKAT).getValue();
if(mojaKategoria.equals(idKategorii))
czyPrzepuszczac = true;
else
czyPrzepuszczac = false;
}
return czyPrzepuszczac;
case XMLEvent.END_ELEMENT:
boolean wynik = czyPrzepuszczac;
if(event.asEndElement().getName().equals(TOWAR)) {
czyPrzepuszczac = true;
}
return wynik;
default: // w szczegolnosci CHARACTERS
return czyPrzepuszczac;
}
}
}
package xml.przyklady_stax;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import javax.xml.transform.stream.StreamSource;
public class SredniaCenaKategorii_Stax {
private static final QName CENA = new QName("urn:sklep", "cena");
private static final QName TOWAR = new QName("urn:sklep", "towar");
private static final QName IDKAT = new QName(null, "id-kategorii");
public static void main(String[] args) {
if(args.length < 2) {
System.out.println("Za malo argumentow. Podaj nazwe pliku i idKategorii.");
return;
}
final String idKategorii = args[1];
double suma = 0.0;
int licznik = 0;
try {
XMLInputFactory fabryka = XMLInputFactory.newInstance();
XMLEventReader reader = fabryka.createXMLEventReader(new StreamSource(args[0]));
while(reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if(event.isStartElement()) {
StartElement startEvent = event.asStartElement();
if(startEvent.getName().equals(TOWAR)) {
String mojaKategoria = startEvent.getAttributeByName(IDKAT).getValue();
if(idKategorii.equals(mojaKategoria)) {
while(reader.hasNext()) {
XMLEvent eventWewn = reader.nextEvent();
if(eventWewn.isStartElement()) {
StartElement seWewn = eventWewn.asStartElement();
if(seWewn.getName().equals(CENA)) {
String cenaString = reader.getElementText();
System.out.println("Cena: "+cenaString);
++licznik;
suma += Double.parseDouble(cenaString);
}
} else if(eventWewn.isEndElement()) {
if(eventWewn.asEndElement().getName().equals(TOWAR)) {
break;
}
}
}
}
}
}
}
double srednia = suma / licznik;
System.out.println("Srednia cena: "+srednia);
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_stax;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import javax.xml.transform.stream.StreamSource;
public class SredniaCenaKategorii_Stax_ZaPomocaFiltra {
private static final QName CENA = new QName("urn:sklep", "cena");
private static final QName TOWAR = new QName("urn:sklep", "towar");
private static final QName IDKAT = new QName(null, "id-kategorii");
public static void main(String[] args) {
if(args.length < 2) {
System.out.println("Za malo argumentow. Podaj nazwe pliku i idKategorii.");
return;
}
final String idKategorii = args[1];
double suma = 0.0;
int licznik = 0;
try {
XMLInputFactory fabryka = XMLInputFactory.newInstance();
XMLEventReader reader = fabryka.createXMLEventReader(new StreamSource(args[0]));
while(reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if(event.isStartElement()) {
StartElement startEvent = event.asStartElement();
if(startEvent.getName().equals(TOWAR)) {
String mojaKategoria = startEvent.getAttributeByName(IDKAT).getValue();
if(idKategorii.equals(mojaKategoria)) {
while(reader.hasNext()) {
XMLEvent eventWewn = reader.nextEvent();
if(eventWewn.isStartElement()) {
StartElement seWewn = eventWewn.asStartElement();
if(seWewn.getName().equals(CENA)) {
String cenaString = reader.getElementText();
System.out.println("Cena: "+cenaString);
++licznik;
suma += Double.parseDouble(cenaString);
}
} else if(eventWewn.isEndElement()) {
if(eventWewn.asEndElement().getName().equals(TOWAR)) {
break;
}
}
}
}
}
}
}
double srednia = suma / licznik;
System.out.println("Srednia cena: "+srednia);
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_stax;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import javax.xml.transform.stream.StreamSource;
public class SredniaCena_Stax {
private static final QName CENA = new QName("urn:sklep", "cena");
public static void main(String[] args) {
if(args.length < 1) {
System.out.println("Za malo argumentow. Podaj nazwe pliku.");
return;
}
double suma = 0.0;
int licznik = 0;
try {
XMLInputFactory fabryka = XMLInputFactory.newInstance();
XMLEventReader reader = fabryka.createXMLEventReader(new StreamSource(args[0]));
while(reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if(event.isStartElement()) {
StartElement startEvent = event.asStartElement();
if(startEvent.getName().equals(CENA)) {
String cenaString = reader.getElementText();
System.out.println("Cena: "+cenaString);
++licznik;
suma += Double.parseDouble(cenaString);
}
}
}
double srednia = suma / licznik;
System.out.println("Srednia cena: "+srednia);
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_stax;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import javax.xml.namespace.QName;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
/**
* @author Patryk Czarnik
* Rozwiązanie zadania 22.
* Program zmienia ceny towarów z podanej kategorii i zapisuje zmieniony dokument.
* Używa StAX (XMLEventReader, XMLEventWriter).
* Argumenty:
* * nazwa pliku wejściowego
* * nazwa pliku wyjściowego
* * id kategorii
* * zmiana cen wyrażona w procentach
*/
public class StAX_Podwyzka {
public static void main(String[] args) {
if(args.length < 4) {
System.out.println("Za malo argumentow");
return;
}
String wej = args[0];
String wyj = args[1];
String kat = args[2];
double zmiana = Double.valueOf(args[3]);
try {
XMLInputFactory ifa = XMLInputFactory.newInstance();
XMLEventReader reader = ifa.createXMLEventReader(new FileInputStream(wej));
XMLOutputFactory ofa = XMLOutputFactory.newInstance();
XMLEventWriter writer = ofa.createXMLEventWriter(new FileOutputStream(wyj));
XMLEventFactory ef = XMLEventFactory.newInstance();
boolean ta_kategoria = false;
while(reader.hasNext()) {
XMLEvent event = reader.nextEvent();
writer.add(event);
if(event.isStartElement()) {
StartElement start_event = event.asStartElement();
if("towar".equals(start_event.getName().getLocalPart())) {
String atrybut = start_event.getAttributeByName(new QName("id-kategorii")).getValue();
if(atrybut.equals(kat)) {
ta_kategoria = true;
}
} else if("cena".equals(start_event.getName().getLocalPart())) {
String cena_string = reader.getElementText();
if(ta_kategoria) {
double cena = Double.valueOf(cena_string);
cena = cena * (1 + zmiana / 100);
cena_string = Double.toString(cena);
}
Characters nowy_wezel = ef.createCharacters(cena_string);
writer.add(nowy_wezel); // 12.59
writer.add(ef.createEndElement(new QName("cena"), null));
}
} else if(event.isEndElement()) {
EndElement end_event = event.asEndElement();
if("towar".equals(end_event.getName().getLocalPart())) {
ta_kategoria = false;
}
}
}
reader.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (FactoryConfigurationError e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
package xml.przyklady_stax;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stream.StreamSource;
import xml.pomoce.Statystyki;
public class StatystykiStax {
public static void main(String[] args) {
if(args.length < 1) {
System.out.println("Za malo argumentow. Podaj nazwe pliku.");
return;
}
try {
Statystyki statystyki = new Statystyki();
int glebokosc = 0;
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader reader = xif.createXMLStreamReader(new StreamSource(args[0]));
while(reader.hasNext()) {
int eventType = reader.next();
switch(eventType) {
case XMLStreamReader.START_ELEMENT:
System.out.println("Poczatek elementu "+reader.getName());
statystyki.dodajElement(reader.getName().getLocalPart());
++glebokosc;
statystyki.zapamietajGlebokosc(glebokosc);
break;
case XMLStreamReader.END_ELEMENT:
--glebokosc;
break;
case XMLStreamReader.CHARACTERS:
statystyki.dodajTekst(reader.getTextLength());
break;
}
}
System.out.println(statystyki.wypisz());
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_transform;
import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class Transform1 {
public static void main(String[] args) {
StreamSource xsl = new StreamSource(new File("sklep_html.xsl"));
StreamSource src = new StreamSource(new File("sklep.xml"));
StreamResult res = new StreamResult(new File("wynik.html"));
try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer tr = tf.newTransformer(xsl);
tr.transform(src, res);
System.out.println("Gotowe");
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
package xml.przyklady_xpath;
import java.math.BigDecimal;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class NajtanszyTowarXPath_A {
public static final String SKLEP_NS = "urn:sklep";
public static void main(String[] args) {
try {
if(args.length < 1) {
System.out.println("Za mało argumentów");
return;
}
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
fact.setNamespaceAware(true);
DocumentBuilder builder = fact.newDocumentBuilder();
XPathFactory xf = XPathFactory.newInstance();
XPath xpath = xf.newXPath();
xpath.setNamespaceContext(new SklepNSContext());
final Document doc = builder.parse(args[0]);
final Element sklep = doc.getDocumentElement();
final NodeList listaKategorii = sklep.getElementsByTagNameNS(SKLEP_NS, "kategoria");
for(int i = 0; i < listaKategorii.getLength(); ++i) {
final Element kategoria = (Element)listaKategorii.item(i);
final NodeList listaZNazwa = kategoria.getElementsByTagNameNS(SKLEP_NS, "nazwa");
final Element elementNazwa = (Element)listaZNazwa.item(0);
final String nazwaKategorii = elementNazwa.getTextContent();
final String idKategorii = kategoria.getAttributeNS(null, "id-kategorii");
System.out.println("\nKategoria "+nazwaKategorii + " (id="+idKategorii+")");
BigDecimal cenaMinimalna = new BigDecimal(Integer.MAX_VALUE);
String najtanszyTowar = null;
final NodeList listaTowarow = (NodeList)xpath.evaluate(
"//sklep:towar[@id-kategorii = '" + idKategorii + "']",
doc, XPathConstants.NODESET);
for(int j = 0; j < listaTowarow.getLength(); ++j) {
final Element towar = (Element)listaTowarow.item(j);
final NodeList listaZNazwaT = towar.getElementsByTagNameNS(SKLEP_NS, "nazwa");
final Element elementNazwaT = (Element)listaZNazwaT.item(0);
final String nazwaTowaru = elementNazwaT.getTextContent();
//final String nazwaTInaczej = towar.getElementsByTagName("nazwa").item(0).getTextContent();
//System.out.println("Towar: "+nazwaTowaru);
final NodeList listaZCena = towar.getElementsByTagNameNS(SKLEP_NS, "cena");
final String cenaString = listaZCena.item(0).getTextContent();
final BigDecimal cena = new BigDecimal(cenaString);
//System.out.println(" cena = "+cena);
if(cena.compareTo(cenaMinimalna) < 0) {
cenaMinimalna = cena;
najtanszyTowar = nazwaTowaru;
}
}
System.out.println("Najtanszy towar: "+najtanszyTowar+", cena: "+cenaMinimalna);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_xpath;
import java.math.BigDecimal;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class NajtanszyTowarXPath_B {
public static final String SKLEP_NS = "urn:sklep";
public static void main(String[] args) {
try {
if(args.length < 1) {
System.out.println("Za mało argumentów");
return;
}
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
fact.setNamespaceAware(true);
DocumentBuilder builder = fact.newDocumentBuilder();
XPathFactory xf = XPathFactory.newInstance();
XPath xpath = xf.newXPath();
xpath.setNamespaceContext(new SklepNSContext());
final Document doc = builder.parse(args[0]);
final Element sklep = doc.getDocumentElement();
final NodeList listaKategorii = sklep.getElementsByTagNameNS(SKLEP_NS, "kategoria");
for(int i = 0; i < listaKategorii.getLength(); ++i) {
final Element kategoria = (Element)listaKategorii.item(i);
final NodeList listaZNazwa = kategoria.getElementsByTagNameNS(SKLEP_NS, "nazwa");
final Element elementNazwa = (Element)listaZNazwa.item(0);
final String nazwaKategorii = elementNazwa.getTextContent();
final String idKategorii = kategoria.getAttributeNS(null, "id-kategorii");
System.out.println("\nKategoria "+nazwaKategorii + " (id="+idKategorii+")");
final String sciezka = "//sklep:towar[@id-kategorii = '" + idKategorii + "'" +
" and not(//sklep:towar[@id-kategorii = '" + idKategorii + "']/sklep:cena < sklep:cena)]/sklep:nazwa";
System.out.println(sciezka);
// Przykladowo: //sklep:towar[@id-kategorii = 'herbata' and not(//sklep:towar[@id-kategorii = 'herbata']/sklep:cena < sklep:cena)]/nazwa
final String towar = xpath.evaluate(sciezka, doc);
System.out.println("Najtanszy towar: "+towar);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
package xml.przyklady_xpath;
import java.util.Iterator;
import javax.xml.namespace.NamespaceContext;
public class SklepNSContext implements NamespaceContext {
@Override
public String getNamespaceURI(String prefix) {
if("sklep".equals(prefix))
return "urn:sklep";
else
return null;
}
@Override
public String getPrefix(String namespaceURI) {
// TODO Auto-generated method stub
return null;
}
@Override
public Iterator getPrefixes(String namespaceURI) {
// TODO Auto-generate)d method stub
return null;
}
}
package xml.rooms;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
public class CSHandler implements ContentHandler {
private int sum = 0;
private CSHandler_States state = CSHandler_States.OUT;
private StringBuilder buffer;
public int getSum() {
return sum;
}
public void setDocumentLocator(Locator locator) {
}
public void startDocument() throws SAXException {
}
public void endDocument() throws SAXException {
}
public void startPrefixMapping(String prefix, String uri) throws SAXException {
}
public void endPrefixMapping(String prefix) throws SAXException {
}
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
switch(state){
case OUT:
if("rooms".equals(qName)) {
state = CSHandler_States.IN_ROOMS;
}
break;
case IN_ROOMS:
if("room".equals(qName)) {
state = CSHandler_States.IN_ROOM;
}
break;
case IN_ROOM:
if("equipment".equals(qName)) {
String projector = atts.getValue("projector");
if("true".equals(projector) || "1".equals(projector))
state = CSHandler_States.IN_ROOM_WITH_PROJECTOR;
}
break;
case IN_ROOM_WITH_PROJECTOR:
if("seats".equals(qName)) {
buffer = new StringBuilder();
state = CSHandler_States.IN_SEATS;
}
break;
case IN_SEATS:
default:
// Do nothing
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
switch(state){
case IN_SEATS:
try {
int value = Integer.parseInt(buffer.toString());
sum += value;
} catch (NumberFormatException e) {
// Incorrect number format is silently ignored (sum is not increased).
}
buffer = null;
state = CSHandler_States.IN_ROOM;
break;
case IN_ROOM:
case IN_ROOM_WITH_PROJECTOR:
if("room".equals(qName)) {
state = CSHandler_States.IN_ROOMS;
}
break;
case IN_ROOMS:
if("rooms".equals(qName)) {
state = CSHandler_States.OUT;
}
break;
case OUT:
default:
// Do nothing
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if(state == CSHandler_States.IN_SEATS) {
buffer.append(ch, start, length);
}
}
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
}
public void processingInstruction(String target, String data) throws SAXException {
}
public void skippedEntity(String name) throws SAXException {
}
}
package xml.rooms;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class CSHandler_JAXP extends DefaultHandler {
private int sum = 0;
private CSHandler_States state = CSHandler_States.OUT;
private StringBuilder buffer;
public int getSum() {
return sum;
}
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
switch(state){
case OUT:
if("rooms".equals(qName)) {
state = CSHandler_States.IN_ROOMS;
}
break;
case IN_ROOMS:
if("room".equals(qName)) {
state = CSHandler_States.IN_ROOM;
}
break;
case IN_ROOM:
if("equipment".equals(qName)) {
String projector = atts.getValue("projector");
if("true".equals(projector) || "1".equals(projector))
state = CSHandler_States.IN_ROOM_WITH_PROJECTOR;
}
break;
case IN_ROOM_WITH_PROJECTOR:
if("seats".equals(qName)) {
buffer = new StringBuilder();
state = CSHandler_States.IN_SEATS;
}
break;
case IN_SEATS:
// Do nothing
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
switch(state){
case IN_SEATS:
try {
int value = Integer.parseInt(buffer.toString());
sum += value;
} catch (NumberFormatException e) {
// Incorrect number format is silently ignored (sum is not increased).
}
buffer = null;
state = CSHandler_States.IN_ROOM;
break;
case IN_ROOM:
case IN_ROOM_WITH_PROJECTOR:
if("room".equals(qName)) {
state = CSHandler_States.IN_ROOMS;
}
break;
case IN_ROOMS:
if("rooms".equals(qName)) {
state = CSHandler_States.OUT;
}
break;
case OUT:
// Do nothing
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if(state == CSHandler_States.IN_SEATS) {
buffer.append(ch, start, length);
}
}
}
package xml.rooms;
public enum CSHandler_States {
OUT,
IN_ROOMS,
IN_ROOM,
IN_ROOM_WITH_PROJECTOR,
IN_SEATS
}
package xml.rooms;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import xml.pomoce.Args;
public class CountSeats_DOM_Generic {
private int sum = 0;
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_DOM_Generic program = new CountSeats_DOM_Generic();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws ParserConfigurationException, SAXException, IOException {
System.out.println("Starting with file " + fileName);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(fileName);
for(Node node = doc.getFirstChild(); node != null; node = node.getNextSibling()) {
if(node.getNodeType() == Node.ELEMENT_NODE
&& "rooms".equals(node.getNodeName())) {
this.processRooms(node);
}
}
return sum;
}
private void processRooms(Node roomsNode) {
for(Node node = roomsNode.getFirstChild(); node != null; node = node.getNextSibling()) {
if(node.getNodeType() == Node.ELEMENT_NODE
&& "room".equals(node.getNodeName())) {
this.processRoom(node);
}
}
}
private void processRoom(Node roomNode) {
boolean hasProjector = false;
Node seatsNode = null;
Node equipmentNode = null;
for(Node node = roomNode.getFirstChild(); node != null; node = node.getNextSibling()) {
// searching for <equipment> node
if(node.getNodeType() == Node.ELEMENT_NODE
&& "equipment".equals(node.getNodeName())) {
equipmentNode = node;
break;
}
}
if(equipmentNode != null) {
NamedNodeMap equipmentAttributes = equipmentNode.getAttributes();
Node projectorNode = equipmentAttributes.getNamedItem("projector");
if(projectorNode != null) {
String projector = projectorNode.getNodeValue().trim();
if("true".equals(projector) || "1".equals(projector)) {
hasProjector = true;
} } }
if(hasProjector) {
for(Node node = roomNode.getFirstChild(); node != null; node = node.getNextSibling()) {
// searching for <seats> node
if(node.getNodeType() == Node.ELEMENT_NODE
&& "seats".equals(node.getNodeName())) {
seatsNode = node;
break;
}
}
}
if(seatsNode != null) {
String seatsString = seatsNode.getTextContent();
try {
int seats = Integer.parseInt(seatsString);
sum += seats;
} catch (NumberFormatException e) {
// Incorrect number format is silently ignored (sum is not increased).
}
}
}
}
package xml.rooms;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import xml.pomoce.Args;
public class CountSeats_DOM_Specialized {
private int sum = 0;
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_DOM_Specialized program = new CountSeats_DOM_Specialized();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws ParserConfigurationException, SAXException, IOException {
System.out.println("Starting with file " + fileName);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(fileName);
Element rooms = doc.getDocumentElement();
if("rooms".equals(rooms.getNodeName()))
this.processRooms(rooms);
return sum;
}
private void processRooms(Element roomsElem) {
NodeList list = roomsElem.getElementsByTagName("room");
for(int i=0; i < list.getLength(); ++i) {
this.processRoom(list.item(i));
}
}
private void processRoom(Node roomNode) {
Element roomElem = (Element) roomNode;
boolean hasProjector = false;
Element seatsElem = null;
Element equipmentElem = (Element) roomElem.getElementsByTagName("equipment").item(0);
if(equipmentElem != null) {
String projector = equipmentElem.getAttribute("projector");
if("true".equals(projector) || "1".equals(projector)) {
hasProjector = true;
} }
if(hasProjector) {
seatsElem = (Element) roomElem.getElementsByTagName("seats").item(0);
}
if(seatsElem != null) {
String seatsString = seatsElem.getTextContent();
try {
int seats = Integer.parseInt(seatsString);
sum += seats;
} catch (NumberFormatException e) {
// Incorrect number format is silently ignored (sum is not increased).
}
}
}
}
package xml.rooms;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import xml.pomoce.Args;
public class CountSeats_SAX_JAXP {
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_SAX_JAXP program = new CountSeats_SAX_JAXP();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws ParserConfigurationException, SAXException, IOException {
System.out.println("Starting with file " + fileName);
CSHandler_JAXP handler = new CSHandler_JAXP();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
parser.parse(fileName, handler);
return handler.getSum();
}
}
package xml.rooms;
import java.io.IOException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
import xml.pomoce.Args;
public class CountSeats_SAX_XMLReader {
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_SAX_XMLReader program = new CountSeats_SAX_XMLReader();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws SAXException, IOException {
System.out.println("Starting with file " + fileName);
CSHandler handler = new CSHandler();
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(handler);
reader.parse(new InputSource(fileName));
return handler.getSum();
}
}
package xml.rooms;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.XMLEvent;
import xml.pomoce.Args;
public class CountSeats_Stax_Event {
private int sum = 0;
XMLEventReader reader;
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_Stax_Event program = new CountSeats_Stax_Event();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws FileNotFoundException, XMLStreamException {
System.out.println("Starting with file " + fileName);
XMLInputFactory xif = XMLInputFactory.newInstance();
reader = xif.createXMLEventReader(new FileInputStream(fileName));
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isStartElement() && "rooms".equals(event.asStartElement().getName().getLocalPart())) {
this.processRooms();
}
}
return sum;
}
private void processRooms() throws XMLStreamException {
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isStartElement() && "room".equals(event.asStartElement().getName().getLocalPart())) {
this.processRoom();
} else if (event.isEndElement() && "rooms".equals(event.asEndElement().getName().getLocalPart())) {
return;
}
}
}
private void processRoom() throws XMLStreamException {
boolean hasProjector = false;
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isStartElement() && "equipment".equals(event.asStartElement().getName().getLocalPart())) {
Attribute projectorEvent = event.asStartElement().getAttributeByName(new QName(XMLConstants.NULL_NS_URI, "projector"));
if(projectorEvent != null) {
String projector = projectorEvent.getValue();
if ("true".equals(projector) || "1".equals(projector)) {
hasProjector = true;
}
}
} else if (hasProjector && event.isStartElement() && "seats".equals(event.asStartElement().getName().getLocalPart())) {
String seatsString = reader.getElementText();
try {
int seats = Integer.parseInt(seatsString);
sum += seats;
} catch (NumberFormatException e) {
// Incorrect number format is silently ignored (sum is not increased).
}
} else if (event.isEndElement() && "room".equals(event.asEndElement().getName().getLocalPart())) {
return;
}
}
}
}
package xml.rooms;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.xml.XMLConstants;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import xml.pomoce.Args;
public class CountSeats_Stax_Stream {
private int sum = 0;
XMLStreamReader reader;
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_Stax_Stream program = new CountSeats_Stax_Stream();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws FileNotFoundException, XMLStreamException {
System.out.println("Starting with file " + fileName);
XMLInputFactory xif = XMLInputFactory.newInstance();
reader = xif.createXMLStreamReader(new FileInputStream(fileName));
while (reader.hasNext()) {
if (reader.isStartElement() && "rooms".equals(reader.getLocalName())) {
this.processRooms();
}
reader.next();
}
return sum;
}
private void processRooms() throws XMLStreamException {
while (reader.hasNext()) {
if (reader.isStartElement() && "room".equals(reader.getLocalName())) {
this.processRoom();
} else if (reader.isEndElement() && "rooms".equals(reader.getLocalName())) {
return;
}
reader.next();
}
}
private void processRoom() throws XMLStreamException {
boolean hasProjector = false;
while (reader.hasNext()) {
if (reader.isStartElement() && "equipment".equals(reader.getLocalName())) {
String projector = reader.getAttributeValue(XMLConstants.NULL_NS_URI, "projector");
if ("true".equals(projector) || "1".equals(projector)) {
hasProjector = true;
}
} else if (hasProjector && reader.isStartElement() && "seats".equals(reader.getLocalName())) {
String seatsString = reader.getElementText();
try {
int seats = Integer.parseInt(seatsString);
sum += seats;
} catch (NumberFormatException e) {
// Incorrect number format is silently ignored (sum is not increased).
}
} else if (reader.isEndElement() && "room".equals(reader.getLocalName())) {
return;
}
reader.next();
}
}
}
package xml.rooms;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import xml.pomoce.Args;
public class CountSeats_XPath_ZPamieci {
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_XPath_ZPamieci program = new CountSeats_XPath_ZPamieci();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
System.out.println("Starting with file " + fileName);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(fileName);
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
Double wynik = (Double)xpath.evaluate("sum(/rooms/room[equipment/@projector='true']/seats)", doc, XPathConstants.NUMBER);
return wynik.intValue();
}
}
package xml.rooms;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import xml.pomoce.Args;
public class CountSeats_XPath_ZPliku {
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml");
String input = args[0];
try {
CountSeats_XPath_ZPliku program = new CountSeats_XPath_ZPliku();
int result = program.countSeats(input);
System.out.println("Result: " + result);
} catch (Exception e) {
System.out.println("Exception! " + e.getMessage());
e.printStackTrace();
}
}
public int countSeats(String fileName) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
System.out.println("Starting with file " + fileName);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(fileName);
Source src = new DOMSource(doc);
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
Double wynik = (Double)xpath.evaluate("sum(/rooms/room[equipment/@projector='true']/seats)", src, XPathConstants.NUMBER);
return wynik.intValue();
}
}
package xml.rooms;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import xml.pomoce.Args;
public class WypiszSaleXslt {
public static void main(String[] args) {
args = Args.argsOrDefault(args, "rooms.xml", "wypisz_sale.xsl", "wypisane_sale.txt");
Source xsl = new StreamSource(args[1]);
Source src = new StreamSource(args[0]);
Result res = new StreamResult(args[2]);
try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer(xsl);
t.transform(src, res);
System.out.println("Gotowe");
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each select="/rooms/room">
<xsl:text>Sala nr </xsl:text>
<xsl:value-of select="number"/>
<xsl:choose>
<xsl:when test="equipment/@projector='true'"> posiada projektor </xsl:when>
<xsl:otherwise> nie posiada projektora </xsl:otherwise>
</xsl:choose>
<xsl:text> i znajduje się w niej </xsl:text>
<xsl:value-of select="seats"/>
<xsl:text> miejsc.
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment