This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Personenliste</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: system-ui, sans-serif;
|
||||
background: #f4f6f8;
|
||||
padding: 2rem;
|
||||
color: #1f2937;
|
||||
margin: 0;
|
||||
}
|
||||
h1 {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.grid {
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.card {
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
padding: 1.25rem;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
||||
width: 260px;
|
||||
border: 2px solid #3b82f6;
|
||||
}
|
||||
.card[data-gender='f'] {
|
||||
border-color: #ec4899;
|
||||
}
|
||||
.badge {
|
||||
background: #e5e7eb;
|
||||
font-size: 0.75rem;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
ul {
|
||||
margin: 0.5rem 0 0 0;
|
||||
padding-left: 1.2rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Personenliste</h1>
|
||||
<div id="app" class="grid"></div>
|
||||
|
||||
<!-- Hier liegt dein originales XML unangetastet -->
|
||||
<script id="xml-data" type="text/xml">
|
||||
<persons>
|
||||
<person category="human" gender="m">
|
||||
<firstName>Max</firstName>
|
||||
<lastName>Mustermann</lastName>
|
||||
<age>30</age>
|
||||
<hobbies>
|
||||
<hobby>Tennis</hobby>
|
||||
<hobby>Schach</hobby>
|
||||
</hobbies>
|
||||
</person>
|
||||
<person gender="f">
|
||||
<firstName>Jane</firstName>
|
||||
<lastName>Doe</lastName>
|
||||
<age>23</age>
|
||||
<hobbies>
|
||||
<hobby>Zocken</hobby>
|
||||
<hobby>Tanzen</hobby>
|
||||
</hobbies>
|
||||
</person>
|
||||
</persons>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
const xmlText = document.getElementById('xml-data').textContent;
|
||||
const xmlDoc = new DOMParser().parseFromString(xmlText, 'text/xml');
|
||||
const container = document.getElementById('app');
|
||||
|
||||
xmlDoc.querySelectorAll('person').forEach((p) => {
|
||||
const hobbies = Array.from(p.querySelectorAll('hobbies hobby'))
|
||||
.map((h) => `<li>${h.textContent}</li>`)
|
||||
.join('');
|
||||
const card = document.createElement('div');
|
||||
card.className = 'card';
|
||||
card.dataset.gender = p.getAttribute('gender') || '';
|
||||
card.innerHTML = `
|
||||
<h3>${p.querySelector('firstName')?.textContent} ${p.querySelector('lastName')?.textContent}</h3>
|
||||
<p>
|
||||
<span class="badge">Alter: ${p.querySelector('age')?.textContent}</span>
|
||||
<span class="badge">Geschlecht: ${p.getAttribute('gender')}</span>
|
||||
</p>
|
||||
<strong>Hobbys:</strong>
|
||||
<ul>${hobbies}</ul>
|
||||
`;
|
||||
container.appendChild(card);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml-stylesheet type="text/xsl" href="#stylesheet"?>
|
||||
<persons>
|
||||
<!-- Eingebettetes XSL-Stylesheet -->
|
||||
<xsl:stylesheet id="stylesheet" xml:id="stylesheet" version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:xml="http://www.w3.org/XML/1998/namespace">
|
||||
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
|
||||
|
||||
<xsl:template match="/">
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Personenübersicht</title>
|
||||
<style>
|
||||
body { font-family: system-ui, sans-serif; background: #f4f6f8; padding: 2rem; color: #1f2937; }
|
||||
h1 { margin-bottom: 1.5rem; }
|
||||
.grid { display: flex; gap: 1.5rem; flex-wrap: wrap; }
|
||||
.card { background: white; border-radius: 8px; padding: 1.25rem; box-shadow: 0 2px 4px rgba(0,0,0,0.08); width: 260px; border: 4px solid #3b82f6; }
|
||||
.card[data-gender="f"] { border-color: #ec4899; }
|
||||
.badge { background: #e5e7eb; font-size: 0.75rem; padding: 2px 6px; border-radius: 4px; margin-right: 4px; }
|
||||
ul { margin: 0.5rem 0 0 0; padding-left: 1.2rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Personenliste</h1>
|
||||
<div class="grid">
|
||||
<xsl:for-each select="persons/person">
|
||||
<div class="card" data-gender="{@gender}">
|
||||
<h3><xsl:value-of select="firstName"/> <xsl:value-of select="lastName"/></h3>
|
||||
<p>
|
||||
<span class="badge">Alter: <xsl:value-of select="age"/></span>
|
||||
<span class="badge">Geschlecht: <xsl:value-of select="@gender"/></span>
|
||||
</p>
|
||||
<strong>Hobbys:</strong>
|
||||
<ul>
|
||||
<xsl:for-each select="hobbies/hobby">
|
||||
<li><xsl:value-of select="."/></li>
|
||||
</xsl:for-each>
|
||||
</ul>
|
||||
</div>
|
||||
</xsl:for-each>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
|
||||
<!-- Nutzdaten -->
|
||||
<person category="human" gender="m">
|
||||
<firstName>Max</firstName>
|
||||
<lastName>Mustermann</lastName>
|
||||
<age>30</age>
|
||||
<hobbies>
|
||||
<hobby>Tennis</hobby>
|
||||
<hobby>Schach</hobby>
|
||||
</hobbies>
|
||||
</person>
|
||||
<person gender="f">
|
||||
<firstName>Jane</firstName>
|
||||
<lastName>Doe</lastName>
|
||||
<age>23</age>
|
||||
<hobbies>
|
||||
<hobby>Zocken</hobby>
|
||||
<hobby>Tanzen</hobby>
|
||||
</hobbies>
|
||||
</person>
|
||||
</persons>
|
||||
Reference in New Issue
Block a user